我有以下页面
<html>
<head>
<script type="text/javascript" src="e01.js"></script>
</head>
<body>
<script type="text/javascript">
var obj={someHTML: "<script>alert('a');</script>rest of the html",
someOtherAttribute:"some value"};
alert(obj.someHTML);
</script>
</body>
</html>
在我的对象的 someHTML 属性中我有 </script>
字符串中的标记。但是浏览器将其读取为实际的关闭标记并关闭脚本元素。我在这里缺少什么吗? (在 ff 和 chrome 中试过)
最佳答案
HTML 在 Javascript 之前被解析并且独立于 Javascript。当前浏览器的行为是,一旦打开标签 <script>
找到,浏览器将切换到“脚本数据状态”并将所有后续数据解释为脚本,直到 </script>
找到了。
哪里</script>
被检测到并不重要——在 JS 字符串、JS 注释、CDATA 部分,甚至 HTML 注释中。
你需要让字符串看起来不像</script>
到 HTML 解析器。最简单的方法是写<\/script>
如 @Daniel的答案。
关于javascript - 为什么要验证 js 字符串中的 </script> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509818/