这个JavaScript的目的是什么?

时间:2009-12-22 03:26:24

标签: javascript html

我正在使用基于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 个答案:

答案 0 :(得分:7)

我认为这是为了打击广告拦截器。

... + 'uage="jav' + 'ascript" src="http://ads.stackoverflow.com

答案 1 :(得分:2)

它是以这种方式编写的,以避免浏览器认为它是<script>的结束标记,这会导致一些问题。

答案 2 :(得分:1)

当HTML解析器遇到document.write('</script>');时,它认为它已找到封闭的<script>标记的末尾。打破标记可以阻止解析器识别结束标记。

我见过的另一种方法是逃避斜线,即document.write('<\/script>');

正确的方法是:

  • 将脚本的正文封装在<![CDATA[ ... ]]>块中(如果提供XHTML)或
  • 将脚本放在外部文件中,或
  • 使用DOM API(即创建脚本节点并将其附加到文档头)

答案 3 :(得分:-1)

也许它可以阻止专门搜索脚本标签的程序。例如,广告拦截器会查找脚本标记和对象标记。