Javascript 为什么</脚本>;正在验证js字符串中的标记

Javascript 为什么</脚本>;正在验证js字符串中的标记,javascript,Javascript,我有下一页 <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",

我有下一页

<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>

var obj={someHTML:“警报('a');html的其余部分”,
someOtherAttribute:“某些值”};
警报(obj.someHTML);

在我的对象的someHTML属性中,我有一个字符串中的
标记。但浏览器将其读取为实际的关闭标记并关闭脚本元素。这里有我遗漏的东西吗?(在ff和chrome中试用过)

您可能希望转义脚本标记,如下所示:

var obj={
someHTML:“警报('a');html的其余部分”,
someOtherAttribute:“某些值”
};

相关职位:


您可以分别通过和转义,或者将整个脚本放在CDATA区域中:

<script type="text/javascript">
<![CDATA[
var obj={someHTML: "<script>alert('a');</script>rest of the html",  
               someOtherAttribute:"some value"};
    obj(some.pageButtonScript);
]]>
</script>

HTML在之前被解析,并且独立于Javascript。当前浏览器行为是,一旦找到打开的标记
,浏览器将切换到“脚本数据状态”,并将所有以下数据解释为脚本,直到找到

检测到
的位置无关紧要-在JS字符串、JS注释、CDATA节甚至HTML注释中


您需要使字符串在HTML解析器看来不像
。最简单的方法是按照中的答案编写

另一种方法是这样做

 var obj= {
 someHTML: "<script>alert('a');</scr"+"ipt>rest of the html",  
 someOtherAttribute: "some value"
 };
var obj={
someHTML:“警报('a');html的其余部分”,
someOtherAttribute:“某些值”
};

只需在结束脚本标记之间留一个空格,这样它就不会被解析为结束标记。

嘿,我在stackoverFlow中发现了一个bug。我不能用普通的文字书写。它在注释中工作,但不是在实际问题中。奇怪的是:关于HTML4.01规范,实际上它应该是
ETAGO
sequence

 var obj= {
 someHTML: "<script>alert('a');</scr"+"ipt>rest of the html",  
 someOtherAttribute: "some value"
 };