鉴于同一主题的other questions,我觉得我理解在javascript字符串中将<script>
标记连接为'<scr'+'ipt..'
的明显理由,即使这本身是misguided 。
但是,查看Instapaper bookmarklet的代码,我看到d.createElement('scr' + 'ipt')
。代码的相关部分(美化)就在问题的最后。
即使这个(反)模式是为了避免HTML解析器在javascript字符串中发生结束<script>
标记后在标记处徘徊,我可以看到在这里做到这一点的理由更少连接文本甚至不代表<script>
标记。
在这种情况下,这是出于其他原因吗?
javascript: function iprl5() {
var d = document,
z = d.createElement('scr' + 'ipt'), //???
b = d.body,
l = d.location;
答案 0 :(得分:5)
逃避"<script>"
是愚蠢的,因为它不会被解析为脚本块内的标记*并且甚至是sillier 来处理{{1}特别的。不是。它缺少"script"
或<
,如果没有它,它将永远不会被解析为标记 - 在任何上下文中。因此</
和f("script")
具有相同的语义。
从技术上讲,在HTML中,需要防止脚本块中的所有 f("scr"+"ipt")
,但实际上浏览器只关心</
。因此,</script>
是我推荐的,但这仅适用于结束标记。也就是说,"<"+"/script>"
(或"<script>"
视情况而定)在脚本块中完全有效。
快乐的编码。
*通过兼容的 HTML解析器:但是,手动(正则表达式)解析可能会以可怕的方式爆炸。 XML / XHTML规则是不同的,但是"script"
需要编码为那些格式正确的无论如何 ...也许CDATA有些晦涩难懂?无论如何,它与HTML无关。
此外,链接的答案不争论<
(或像"<scr"+"ipt.."
这样的子集):相反,他们主张防范关闭 script-tag构造,以"scr"+"ipt"
开头,甚至不在帖子的代码中......
答案 1 :(得分:3)
没有
我想。
我希望这是由被'</script>'
焚烧且过于保护的人完成的。