我在DotNetNuke工作,但这似乎并不是严格意义上的DNN问题。
我在我的模块中使用DNN提供的方法,名为FormatEmail,它使用document.write写出如下的电子邮件:
<script language="text/javascript">
<!--
document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62))
// -->
</script>
我刚刚安装了DNN 5,我知道在代码库的其他新增内容中包含了jQuery。请问jQuery会阻止document.write代码工作吗?
DNN应该使用其他方法隐藏机器人的文字吗?
我是否应该停止使用此方法来隐藏我的电子邮件地址?
更新: 该页面未使用xhtml。
答案 0 :(得分:5)
我不知道是否发生了这种情况,但如果您的网站告诉浏览器它是严格的XHTML,则document.write
和document.writeln
将无效。我认为,要实现这一点,您必须使用严格的DOCTYPE并将Content-Type
标头设置为application/xml+xhtml
而不是text/html
(许多服务器下的默认设置)。这是因为以这种方式操纵DOM可能会破坏它。例如,如果我将以下一半放在经过验证的网页上:
<script type="text/javascript">
<!--
document.write("</body>");
// -->
</script>
该文档将验证并符合XHTML标准,但在大多数浏览器中都无效。
另一种方法是创建一个DOM节点,其中应插入电子邮件地址,并在页面加载时插入它。例如:
<p>My email address is <span id="email"></span>.</p>
<script type="text/javascript">
<!--
document.body.onload = function() {
document.getElementById("email").textContent = String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62);
};
// -->
</script>
或者,正如你设置了jQuery:
<p>My email address is <span id="email"></span>.</p>
<script type="text/javascript">
<!--
$( function() {
$("#email").text(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,34,62,119,101,98,109,105,110,64,97,116,101,110,118,101,108,100,116,46,111,114,103,60,47,97,62));
} );
// -->
</script>
答案 1 :(得分:2)
我想我在DNN错误跟踪器中找到了具体答案:
输出应为:
<script type="text/javascript">
//<![CDATA[
document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,84,101,115,116,64,106,101,102,102,109,97,114,116,105,110,46,99,111,109,34,62,84,101,115,116,64,106,101,102,102,109,97,114,116,105,110,46,99,111,109,60,47,97,62))
//]]>
</script>
这似乎解决了我的网站(没有运行XHTML)的问题。
该错误位于here。
答案 2 :(得分:0)
杰夫,
你确实找到了正确的解决方案,但说实话,我并不确定这有什么好处。是的,电子邮件可能会被刮掉,但这个过程只是彻头彻尾的过度杀伤,至少在我看来是这样。没有必要运行javascript,只是为了呈现电子邮件链接。
这只是我手头非常具体的0.02美元。