gpt4 book ai didi

javascript - 为什么在用 document.write() 编写时拆分 <script> 标签?

转载 作者:行者123 更新时间:2023-11-30 06:42:38 24 4
gpt4 key购买 nike

为什么某些网站(或为客户提供 javascript 代码的广告商)采用拆分 <script> 的技术和/或 </script>document.write() 内标记电话?

我注意到亚马逊也这样做,例如:

<script type='text/javascript'>
if (typeof window['jQuery'] == 'undefined') document.write('<scr'+'ipt type="text/javascript" src="http://z-ecx.images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.pack._V265113567_.js"></sc'+'ript>');
</script>

最佳答案

</script>必须被分解,否则它会结束封闭的 <script></script>阻止太早。真的应该在 < 之间拆分和 / , 因为脚本 block (根据 SGML)应该是 terminated by any end-tag open (ETAGO) sequence (i.e. </ ) :

Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents. Markup and entities must be treated as raw text and passed to the application as is. The first occurrence of the character sequence "</" (end-tag open delimiter) is treated as terminating the end of the element's content. In valid documents, this would be the end tag for the element.

然而在实践中,浏览器只会在实际 </script> 上结束解析 CDATA 脚本 block 关闭标签。

在 XHTML 中没有对脚本 block 的这种特殊处理,所以任何 < (或 & )里面的字符必须是 &escaped;就像在任何其他元素中一样。然而,将 XHTML 解析为老式 HTML 的浏览器会感到困惑。有涉及 CDATA block 的解决方法,但最简单的方法是避免使用这些未转义的字符。从适用于任何一种解析器的脚本编写脚本元素的更好方法是:

<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="foo.js">\x3C/script>');
</script>

关于javascript - 为什么在用 document.write() 编写时拆分 &lt;script&gt; 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com