为什么document.write不再适合我?

Jef*_*tin 0 javascript dotnetnuke-5 dotnetnuke-module

我在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>
Run Code Online (Sandbox Code Playgroud)

我刚刚安装了DNN 5,我知道在代码库的其他新增内容中包含了jQuery.jQuery会阻止document.write代码工作吗?

DNN应该使用其他方法来掩盖机器人的文字吗?

我是否应该停止使用此方法来隐藏我的电子邮件地址?

更新:该页面未使用xhtml.

Sam*_*war 5

我不知道这是不是发生了什么,但如果你的网站告诉浏览器它是严格的XHTML document.write,那document.writeln将无法工作.我相信,要实现这一点,您必须使用严格的DOCTYPE并将Content-Type标头设置为application/xml+xhtml而不是text/html(许多服务器下的默认设置).这是因为以这种方式操纵DOM可能会破坏它.例如,如果我将以下一半放在经过验证的网页上:

<script type="text/javascript">
<!--
    document.write("</body>");
// -->
</script>
Run Code Online (Sandbox Code Playgroud)

该文档将验证并符合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>
Run Code Online (Sandbox Code Playgroud)

或者,当您设置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>
Run Code Online (Sandbox Code Playgroud)