javascript书签代码中'scr'+'ipt'的连接

时间:2012-02-17 23:21:53

标签: javascript

鉴于同一主题的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;

2 个答案:

答案 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>'焚烧且过于保护的人完成的。