这是一篇来自cssrain站长的译文。很多时候,我们都不敢在自己的勃客、网站上留下自己的mail,因为 这会带来大量的垃圾邮件。
但如果不留mail,又会让很多用户、过客无法与自己联络,这真是一个两难的问题。在几年前就有那种把email改成用document.write输出的情况。但这种并不实用。
看完这篇文章,或者你应该有相对较好的方法来处理你的邮件,不过我个人推荐的是这种;
- <!--这是一个简单的例子,可能并不能运行,我是直接手工输入的,没有debug,只是介绍原理-->
- <a href="#" onclick="sendmail()" id='sendmail'>gou<span class="bgcolor">0982134</span>ki@<span class="bgcolor">0912ujf</span>neatdns.com</a>
- <script>
- function sendmail(){
- $('#sendmail span').remove();
- //然后反$('#sendmail').text() 拷贝到剪贴板,给用户提示一下
- }
- </script>
改写了一下,终于可以走通了,不会用clone,只能用这种替代方案了。。代码较差:
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
- <style>
- #sendmail span{display:none}
- #hiddenmail {display:none}
- </style>
- <a href="#" id='sendmail'>gou<span>0982134</span>ki@<span>0912ujf</span>neat<span>091r</span>dns.com</a><span id="hiddenmail"</span>
- <script>
- $(document).ready(function(){
- $('#hiddenmail').html( $("#sendmail").html());
- $("#hiddenmail span").remove();
- $('#sendmail').attr("href" ,"mailto:"+$("#hiddenmail").text());
- });
- </script>
以下是66[cssrain站长]翻译的文章内容:
一直以来我都认为” mailto: “是一个神圣的链接。通过它,我可以在网页中发布我的email地址,并且任何人都可以通过单击这个链接联系我。当然前提是在一个纯洁的Web环境下 ---在垃圾邮件发送者出来之前。举个例子说:今天你在你的网页中使用了” mailto: “,那么30秒后你将收到第一封伟哥信息。垃圾邮件发送者的速度之快另你惊讶。从今以后,你将收到越来越多的垃圾邮件。那么我们有什么办法,在自己的网页 中发布自己邮箱的同时,不引起垃圾邮件发布者的注意呢?
最明显的解决办法是在你的HTML中使用机器不可读的Email。比如:“bob (at) bobsdomain dot com”。虽然这可以使垃圾邮件发送者不再那么容易,但它同时也会为难您的用户。
另一种选择是使用JavaScript生成的电子邮件地址 ,然后对字符串加点编码。如:
<p>contact :
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>
这将阻止大多数垃圾邮件发送者,但如果用户禁用JavaScript将不会看到您的地址。 一个更好的解决办法是使用它们两者相结合的技术,以阻止垃圾邮件,同时不会造成用户的困难。 首先在我的网页中使用一个人性化的,同时垃圾邮件发送者不能收集的email地址。我们还将它链 接到一个联络网页,例如: < p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p> 请注意,我们为链接添加了一个class,并设置为”email”。 接下来写一个JavaScript函数搜寻网页的伪装的电子邮件,并将它转换成真正的” mailto: “链接。 我们将创建一个' email.js '文件,将它包括在我们的HTML里 : 所需要的代码很短,代码如下: 使用两者结合的结果是: 1、我们的原始HTML网页中没有”mailto:”链接,同时也不会轻易收到垃圾邮件发送者发来的垃圾邮件。 2、绝大多数的用户(那些启用JavaScript )将看到一个标准的电子邮件地址和“mailto:”链接。 3、少部分禁用脚本的用户可以看到“bob (at) bobsdomain dot com”的地址。 说了这么多,意图就是展示这些概念,而不是这些代码。尽管例子能正常工作,但我还是建议你: 1、使用您自己的伪装电子邮件格式,例如: “bob {@} bobsdomain – dot - com”。 因为垃圾邮件发送者可以阅读这篇文章后变换编码的电子邮件,然后轻易的对付你! 2、使用不同的链接标识符--- “email”有点明显! 3、使用JavaScript库,例如jQuery ,使代码更为简短。您还应该确保它应付空格或其他DOM节 4、使用一个更强大的事件处理程序来取代window.onload。 祝您好运。 例子演示: http://www.cssrain.cn/demo/howtoemail.html 原文地址: http://www.sitepoint.com/blogs/
(我不推荐使用 document.write() )
< script type="text/javascript" src="email.js"></script>
function EmailUnobsfuscate() {
//查找所有的a
var link = document.getElementsByTagName && document.getElementsByTagName("a");
var email, e;
for (e = 0; link && e < link.length; e++) {
// 判断当前link的class是否含有"email"
if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
// 获取全小写的email地址
email = link[e].firstChild.nodeValue.toLowerCase() || "";
// 转换email地址
//将dot转为.
email = email.replace(/dot/ig, ".");
//将(at)转为@
email = email.replace(/\(at\)/ig, "@");
//将空格转为""
email = email.replace(/\s/g, "");
//判断是否为有效email
if (/^[^@]+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/.test(email)) {
// 把真正的email插入到页面中
link[e].href = "mailto:" + email;
link[e].firstChild.nodeValue = email;
}
}
}
}
最后,我们需要确保在网页加载完毕后运行email.js:
window.onload = EmailUnobsfuscate;
点周围的电子邮件地址文字(不处理的代码段)。