javascript – 如何用实时网页中的mailto链接替换电子邮件地址?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何用实时网页中的mailto链接替换电子邮件地址?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2707字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 如何用实时网页中的mailto链接替换电子邮件地址?](/upload/InfoBanner/zyjiaocheng/709/22e4a4e197fe4201afcfc3b6c2b8303c.jpg)
想象一下:您遇到一个网页,上面写着“只是向user@example.com发送消息”,但要实际发送电子邮件,您需要突出显示该地址,然后将其剪切并粘贴到新撰写窗口的收件人字段中您选择的电子邮件客户端.
如果它只是一个mailto:链接,显然生活会更容易,所以你可以点击它并自动创建一条新消息.如何构建一个将电子邮件地址转换为可点击的mailto:links的扩展程序?
我本来打算问是否有一个扩展来为未链接的Twitter @username提及启用类似的功能,但我认为这个电子邮件地址问题将是一个更简单的情况.
解决方法:
使用innerHTML替换电子邮件 – 不,这打破了页面,特别是因为删除了事件侦听器并且还替换了属性.
递归遍历所有节点:
>以相反的顺序循环,以防止在修改DOM时发生冲突.
>对于每个项目,检查它的值是否为nodeType.
>如果.nodeType === 1(元素),再次调用该函数(递归).
>如果.nodeType === 3(文本节点):
>使用正则表达式和exec方法查找一个电子邮件地址.使用结果的.index属性知道电子邮件地址的起始位置,使用result [0] .length来知道地址的长度.
>使用节点的splitText方法将文本节点分为三个部分.
>创建< a>元件.
>将电子邮件的文本节点(上一个文本节点)附加到此锚点.它会自动从文档中删除.
>在第三个节点之前插入此链接.
演示
不是Chrome扩展程序,但它显示了Chrome扩展程序的行为方式:http://jsfiddle.net/ckw89/
Chrome扩展程序
(正则表达式基于MongoEngine’s EmailField pattern):
的script.js
// Initiate recursion
wrapLink(document.body);
function wrapLink(elem) { // elem must be an element node
var nodes = elem.childNodes
, i = nodes.length
, regexp = /([-!\x23$%&'*+\/=?^_`{}|~0-9A-Z]+(\.[-!\x23$%&'*+\/=?^_`{}|~0-9A-Z]+)*|^"([\x01-\x08\x0b\x0c\x0e-\x1f!\x23-\\[\\]-\x7f]|\\[\x01-011\x0b\x0c\x0e-\x7f])*")@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}/i
, node, emailNode, a, result;
while (node = nodes[--i]) {
if (node.nodeType === 1) {
// Skip anchor tags, nested anchors make no sense
if (node.nodeName.toUpperCase() !== 'A')
wrapLink(node);
} else if (node.nodeType === 3) {
// 1: Please note that the regexp has NO global flag,
// and that `node.textContent` shrinks when an address is found
while (result = regexp.exec(node.textContent)) {
// 2: Contact <SPLIT> me@example.com for details
node = node.splitText(result.index);
// 2: Contact <SPLIT>me@example.com<SPLIT> for details
node = node.splitText(result[0].length);
// me@example.com
emailNode = node.previousSibling
// 3. Create link
a = document.createElement('a');
a.href = 'mailto:' + result[0];
// 4: Append emailNode
a.appendChild(emailNode);
// 5: Insert before
elem.insertBefore(a, node);
}
}
}
}
当用作Content script时,此脚本将立即起作用,因为它与页面的唯一交互是DOM.为完整起见,这是manifest.json文件的内容:
{
"name": "Turns email addresses in `mailto:`s",
"version": "1",
"version_version": 2,
"content_scripts": [{
"matches": ["*://*/*"],
"js": ["script.js"]
}]
}
表现通知
当前脚本替换实时文档中的所有节点.考虑在操作之前将根节点(例如< body>)移动到document fragment.
内容总结
以上是互联网集市为您收集整理的javascript – 如何用实时网页中的mailto链接替换电子邮件地址?全部内容,希望文章能够帮你解决javascript – 如何用实时网页中的mailto链接替换电子邮件地址?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。