document.write()
调用中分割<script>
和/或</script>
标签?我注意到亚马逊也这样做,例如:<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>
\/
是代表/
的有效转义序列,那为什么不直接使用它来替代针对<
的字符串字面值转义呢?例如document.write('<script src=foo.js><\/script>');
。此外,</script>
并不是唯一一个可以关闭<script>
元素的字符序列。更多信息请参考:http://mathiasbynens.be/notes/etago - Mathias Bynens<\/script>
在 HTML 中是可以的,但在没有额外 CDATA 包装的 XHTML 中,它仍然是一个格式正确性错误。此外,在内联事件处理程序属性中,您也可以使用\x3C
,其中<
在 HTML 和 XHTML 中都是无效的,因此它具有更广泛的适用性:如果我选择一种易于自动化的方法来转义 JS 字符串文字中的敏感字符以适用于所有上下文,那么我会选择这个。 - bobince<
可以用于行内事件处理程序属性。 http://html5.validator.nu/?doc=data%3Atext%2Fhtml%3Bcharset%3Dutf-8%2C%3C!doctype+html%3E%3Ctitle%3E%3C%2Ftitle%3E%3Cp%2520contenteditable%2520oninput%3D%22alert('%3Clol%3E')%22%3E 你对\x3C
的XHTML兼容性也是正确的,但由于XHTML无论如何都不支持document.write
(或innerHTML
),所以我不知道这与相关性。 - Mathias Bynensdocument.write
是无关紧要的,它只是一个例子。OP本来可以使用innerHTML,这与隐藏</
字符序列不相关,无论它出现在哪里的标记解析器中。只是大多数解析器会在脚本元素内容忍它,但严格来说它们不应该(但HTML解析器非常容忍)。不过您是正确的,对于HTML,<\/
在所有情况下都足够了。 - RobGdocument.write('<script src="foo.js">\x3C/script>')
看起来都是足够的。(我省略了 type 属性,因为它在 HTML5 中不是必需的,并且任何浏览器也不会强制执行该属性。) - Matt Browne