代码之家  ›  专栏  ›  技术社区  ›  Jeff Martin

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

  •  0
  • Jeff Martin  · 技术社区  · 15 年前

    我在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是否应该使用另一种方法来隐藏来自bots的文本?

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

    更新: 该页未使用XHTML。

    3 回复  |  直到 11 年前
        1
  •  5
  •   Samir Talwar PruthviRaj Reddy    15 年前

    我不知道这是不是发生了,但是 document.write document.writeln 如果您的站点告诉浏览器它是严格的XHTML,那么它将不起作用。我相信为了实现这一点,您必须使用严格的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>
    
        2
  •  2
  •   Jeff Martin    15 年前

    我想我在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)的问题。

    错误已定位 here .

        3
  •  0
  •   Mitchel Sellers    15 年前

    杰夫

    你确实找到了正确的解决方案,但老实说,我不太确定这会带来什么好处。是的,电子邮件可能会被刮伤,但至少在我看来,这一过程完全是多余的。不需要运行javascript,只需要呈现电子邮件链接。

    这只是我的0.02美元,关于你手头的具体事务。

    推荐文章