我有一个应用程序,可以将各种东西生成到页面上的JavaScript字符串中。我以为所有转义都可以,但是后来我遇到了一个奇怪的问题,我找不到真正的原因:
这在HTML页面中不合法吗:
<script type="text/javascript">
alert("hello </script>");
</script>
“法律”表示它将发出警报hello </script>
。
显然,至少在我的盒子上,moz和chrome都</script>
在警报字符串的一部分之后切断了脚本,不产生警报并且输出混乱。有没有人碰到这个,这是浏览器错误吗?
HTML将其解析为:
<script type="text/javascript">
alert("hello
</script>
");
</script>
第一次出现</script>
关闭打开<script>
元素。避免这个问题的常用方法是通过包括\
在之前/
的字符串中的字符:
<script type="text/javascript">
alert("hello <\/script>");
</script>
之所以\
可行,是因为转义符将阻止浏览器识别<\/script>
为结束标签。通常\
在JavaScript字符串中用作转义序列,但是由于没有\/
序列,转义字符将被忽略,并且字符串的求值为'</script'>
。
如果您遵循将所有JavaScript保留在外部.js
文件中的良好做法,通常可以避免此问题。也就是说,常见的是,这种转义用于无响应CDN的本地脚本回退。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句