JavaScript字符串中的脚本标记

re5*_*5et 37 javascript

我遇到一个问题,在JavaScript中引用的字符串中有一个结束脚本标记,它正在查杀脚本.我认为这不是预期的行为.这方面的一个例子可以在这里看到:http://jsbin.com/oqepe/edit

我感兴趣的测试用例浏览器:Mozilla/5.0(X11; U; Linux i686; en-US; rv:1.9.1.4)Gecko/20091028 Ubuntu/9.10(karmic)Firefox/3.5.4.

CMS*_*CMS 74

怎么了?

浏览器HTML解析器将</script>在字符串中看到它,并将其解释为脚本元素的结尾.

看看这个例子的语法着色:

<script>
var test = 'foo... </script> bar.....';
</script>
Run Code Online (Sandbox Code Playgroud)

请注意,单词bar被视为脚本元素之外的文本内容...

常用的技术是使用连接运算符:

var test = '...... </scr'+'ipt>......';
Run Code Online (Sandbox Code Playgroud)

  • 逃避/,不要将字符串分成几部分.IIRC在HTML 4.x中仍然是一个错误.打字肯定更加繁琐,阅读更麻烦,处理更多字符,效率更低(因为字符串连接不是JS操作中最便宜的) (12认同)
  • 这确实有效,但我很惊讶我必须这样做.部分问题是我正在抓取页面并将结果存储在JS变量中.我对回来的东西没有真正的期望. (3认同)
  • 是的,您只需要添加一个反斜杠`var t = 'my tag &lt;\/script&gt; for script';` (2认同)

Lir*_*una 14

你需要逃避它,否则它将成为HTML的一部分.

var test = 'what the hell... \<\/script\> \<h1\>why?!?!?!\<\/h1\>';
Run Code Online (Sandbox Code Playgroud)

  • 哦,如果你用CDATA标记包装,那么它将无法修复标签汤解析器. (2认同)