2010-07-27 41 views
3

可能重复:
Why split the <script> tag when writing it with document.write()?为什么此脚本元素分解为多个document.write()调用?

我经常看到下面的语句:

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

这样做有什么好处?为什么人们不写下整个剧本?

document.write("<script "); 
+0

会质疑jQuery的标题和标签。相应修改 – 2010-07-27 09:55:30

+0

@James Wiseman:我不读jQuery,只是查询。 – Gumbo 2010-07-27 09:56:53

+0

是的,它是查询 – Reigel 2010-07-27 09:58:31

回答

3

这可以帮助你:

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

根据不同的浏览器,其他之前的JavaScript, 以及如何量以及形成的整体代码 是,这样做是以防止解析器 将标签和 标签解释为可执行代码 而不是将被写入的字符串。

我发现它只是保存头痛的道路,如果你这样做 当使用脚本写脚本 标签。

+1

而不是跨多个* document.write()*调用,通常只是“结束”结束标记就足够了,例如'

0

难道这是不是有人试图越过防病毒脚本扫描仪?

回答你的问题:
这样做没有收获。事实上,它实际上比较慢,因为你调用了更多的函数,创建了更多的字符串对象,并附加了更多的字符串。

对于旧的浏览器,我想这可能是类似的<!-- <script> blargh </script> //-->

0

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

很可能这是一些企图在某处注入恶意代码的尝试。

1

这取决于。当你看到这样的代码,这意味着他们正在动态生成的某些部分否则是的,他们可以很容易地写在<script>标签下面。

有时,这样的代码用于恶意目的。

2

这可能是为了符合标准而做的 - 但在这种情况下他们做错了。

description of CDATA data type

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

所以他们更应该有分裂的结束标记分隔开</这样的:

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

+1 - '<\/script>'也可以,所以你不必使用字符串连接。 – 2010-07-27 10:08:27

+1

@安迪E:我知道。我只是使用了连接以及它在问题的示例中使用。 – Gumbo 2010-07-27 10:14:38

相关问题