代码之家  ›  专栏  ›  技术社区  ›  cschol

这个javascript的目的是什么?

  •  0
  • cschol  · 技术社区  · 15 年前

    我在玩一个基于python的HTML解析器并解析stackoverflow。解析器与

    HTMLParser.HTMLParseError: bad end tag: "</'+'scr'+'ipt>", at line 649, column 29
    

    该错误指向站点源中的以下javascript行:

    <script type="text/javascript">
        document.write('<s'+'cript lang' + 'uage="jav' + 'ascript" src=" [...] ">'); 
        document.write('</'+'scr'+'ipt>');
    </script>
    

    ([…]替换一个长链接,为了简单起见将其删除)

    出于好奇,在我看来,是否有一个特定的原因使代码看起来像是人为的“模糊”,即为什么要使用document.write方法连接所有被切碎的字符串?

    4 回复  |  直到 15 年前
        1
  •  7
  •   Derek Illchuk    15 年前

    我认为这是为了对抗Adblocker。

    ... + 'uage="jav' + 'ascript" src="http://ads.stackoverflow.com
    
        2
  •  2
  •   avpaderno    15 年前

    它是这样写的,以避免浏览器认为它是结束标签 <script> 会引起一些问题。

        3
  •  1
  •   harto    15 年前

    当HTML解析器遇到 document.write('</script>'); ,它认为它找到了封闭的尽头 <script> 标签。分解标记会阻止分析器识别结束标记。

    我看到的另一种方法是通过摆脱斜线,即 document.write('<\/script>'); .

    这个 对的 这样做的方法是:

    • 将脚本的正文括在 <![CDATA[ ... ]]> 阻止(如果提供XHTML),或
    • 将脚本放入外部文件中,或者
    • 改用domAPI(即创建一个脚本节点并将其附加到文档头)
        4
  •  -1
  •   Gabriel McAdams    15 年前

    可能是为了停止专门搜索脚本标记的程序。例如,广告拦截器查找脚本标记和对象标记。