为什么这个脚本元素被分解为多个document.write()调用?

时间:2010-07-27 09:48:17

标签: javascript

  

可能重复:
  Why split the <script> tag when writing it with document.write()?

我经常看到以下声明:

document.write("<scr");
document.write("ipt language=\"Javascript\" type=\"text/javascript\" src=\"source url\"></scr");
document.write("ipt>");

这有什么好处?人们为什么不编写整个脚本,如下所示?

document.write("<script ");

5 个答案:

答案 0 :(得分:3)

这可能会对您有所帮助:

http://www.webmasterworld.com/forum91/2913.htm

  

取决于浏览器,其他前面的javascript数量,   以及整体代码的结构如何   是,这样做是为了防止解析器   从解释和    标签作为可执行代码   而不是作为要写的字符串。

     

我发现如果你这样做,它只会让你头疼   当使用脚本编写脚本时   标签

答案 1 :(得分:2)

这可能是为了遵守标准 - 但在这种情况下他们做错了。

来自description of CDATA data type

  

虽然STYLESCRIPT元素使用CDATA作为其数据模型,但对于这些元素,CDATA必须由用户代理以不同方式处理。必须将标记和实体视为原始文本并按原样传递给应用程序。 第一次出现的字符序列“</”(结束标记打开分隔符)被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。

所以他们应该像这样分割结束标记开放分隔符</

document.write("<script language=\"Javascript\" type=\"text/javascript\" src=\"source url\"><" + "/script>");

答案 2 :(得分:1)

这取决于。当您看到此类代码时,就意味着他们正在生成页面的某些部分 动态 ,否则他们可以轻松地在<script>标签下方编写。< / p>

有时,此类代码用于 恶意 目的。

答案 3 :(得分:0)

这是不是有些人试图通过防病毒软件的脚本扫描程序?

回答你的问题:
这样做没有任何好处。事实上,它实际上更慢,因为你正在调用更多的函数,创建更多的字符串对象,并附加更多的字符串。

对于旧版浏览器,我猜它可能与<!-- <script> blargh </script> //-->

的使用类似

答案 4 :(得分:0)

我相信这是将脚本潜入动态页面的某种原始代码混淆。例如,如果某个网站过滤了字符串“<script”的用户输入,那么这段代码仍然可以通过。

这很可能是某种尝试在某种程度上注入恶意代码的行为。