Javascript 为什么document.write不再适用于我?

Javascript 为什么document.write不再适用于我?,javascript,dotnetnuke-module,dotnetnuke-5,Javascript,Dotnetnuke Module,Dotnetnuke 5,我在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,

我在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>

我刚刚安装了DNN5,我知道它包括jQuery和对代码库的其他添加。jQuery会停止document.write代码工作吗

DNN是否应该使用另一种方法来隐藏来自机器人程序的文本

我应该停止使用这种方法来掩盖我的电子邮件地址吗

更新:
该页面未使用xhtml。

我不知道是否发生了这种情况,但
document.write
document.writeln
如果您的网站告诉浏览器它是严格的xhtml,则无法使用。我认为要实现这一点,必须使用严格的DOCTYPE,并将
内容类型
标题设置为
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>
我的电子邮件地址是


我想我在DNN bug追踪器中找到了具体的答案:

输出应为:

<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)的问题

找到了bug

杰夫

你确实找到了正确的解决方案,但老实说,我不确定这有什么好处。是的,电子邮件可能会被删掉,但至少在我看来,这个过程完全是过火了。无需运行javascript,只需呈现电子邮件链接即可


这只是我对你手头上非常具体的事情的0.02美元。

Firefox说我处于怪癖模式,所以我不认为是XHTML做的。我将用此信息更新问题。。。但我可能会尝试您的jQuery解决方案(编辑DNN核心…),当我运行您的脚本时,FF中发生了一些奇怪的事情。有时有效,有时无效,有时JS根本停止运行!逃离document.write并使用Samir的方法。我很快就要这么做了,但这一切都隐藏在我想继续使用的DNN方法中。这可能应该在注释中。。。事实上,我曾多次询问使用我网站电子邮件的人是否受到这种保护,所以我很高兴地说是这样。我的模块已经使用这个DNN提供的方法有一段时间了,当我安装DNN 5时,它突然停止工作,这令人沮丧。