2014-03-18 67 views
1

我有一个应用程序可以将各种各样的东西放入页面上的JavaScript字符串中。我以为所有的逃避是好的,但后来我遇到一个奇怪的问题,我真的无法找到一个理由来:</script><script>标签中的JavaScript字符串

不应该这是一个HTML页面的法律:

<script type="text/javascript"> 
    alert("hello </script>"); 
</script> 

“法律“意思是它会产生一个警报hello </script>

显然,moz和chrome,至少在我的盒子上,在警报字符串的</script>部分之后关闭脚本,没有产生警报和乱七八糟的输出。有没有人遇到这个问题,这是一个浏览器错误?

+2

把一个斜杠'警报(“你好<\/script>”);' –

+0

看看这个伟大的职位在哪里是很好的解释http://stackoverflow.com/questions/66837/when-is-a-cdata-section-必要的脚本标记 –

+0

可能的重复[是否有必要“转义”字符“<" and ">”的JavaScript字符串?](http://stackoverflow.com/questions/779959/is-it-necessary-to -escape-character-and-for-javascript-string) – user1596138

回答

6

的HTML解析它为:

<script type="text/javascript"> 
    alert("hello 
</script> 
"); 
</script> 

随着</script>第一次出现关闭开<script>元件。避免这个问题的常用方法是通过包含字符串中的字符/\

<script type="text/javascript"> 
    alert("hello <\/script>"); 
</script> 

这工作,因为\转义字符将阻止浏览器识别<\/script>作为结束标记。通常,\被用作JavaScript字符串中的转义序列,但由于没有\/序列,所以转义字符被忽略,字符串的计算结果为'</script'>

如果您遵循将所有javascript保存在外部.js文件中的良好做法,通常可以避免此问题。也就是说,通常会看到用于local script fallbacks for unresponsive CDNs的这种转义。

+0

感谢您指点HTML和脚本解析工作在不同的层次。 – jookos

3
<script type="text/javascript"> 
    alert('hello <'+'/script>'); 
</script> 

<script type="text/javascript"> 
    alert('hello <\/script>'); 
</script> 
+1

解释一下你在这里做了什么,不要只是发布你的代码,会帮助那些不了解你在这里做过什么的人... –

0

你应该做的像

<script type="text/javascript"> 
// <![CDATA[ 
    alert('hello </script>'); 
// ]]> 
</script> 

为了防止解析。

+0

我试过了;没有帮助。 – jookos

相关问题