究竟需要在javascript字符串中转义什么。或者,更具体地说,为什么为什么我需要在JavaScript中转义'/'字符?
var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>';
给出语法错误?逃避最后的<\/script>
似乎修复了语法错误,但这对我来说并不合理,因为它是一个JavaScript初学者。
究竟需要在javascript字符串中转义什么。或者,更具体地说,为什么为什么我需要在JavaScript中转义'/'字符?
var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>';
给出语法错误?逃避最后的<\/script>
似乎修复了语法错误,但这对我来说并不合理,因为它是一个JavaScript初学者。
问题可能在于Web浏览器看到“</script>
”序列并确定脚本块结束。
另一种方式从像你这样使用转义序列一边解决这个问题是要打散成2个字符串串接:
"<" + "/script>"
行为,你看到的是不是一个错误ñ浏览器的一部分。
浏览器不“查看”脚本块,他们只是将内容传递给脚本引擎。 “</script>
”序列是他们如何知道他们已经到达块的末尾,并且由于浏览器没有解释块的内容,所以无法知道它是否在文本字符串的上下文中脚本代码。
请记住,即使浏览器不常见,浏览器也可以支持更多的脚本语言,而不仅仅是Javascript。 Internet Explorer支持VB脚本(我认为任何可以由Windows脚本主机运行的脚本语言,但我不确定)。当脚本块的功能被放入浏览器的时候,没有人能确定Javascript最终会变得如此普遍。
的HTML解析器将解释您的字符串标记令牌(ETAGO定界符</
)的结束,作为当前脚本标签的末尾,给您未终止的字符串SyntaxError
。
有几种解决方法,包括使用CDATA
块,但最简单的方法是逃避这个角色,或做一个字符串连接:
var snaphtml = '<script src="...">\x3C/script>';
var snaphtml = '<script src="..."><' + '/script>';
当然,你也可以创建你script
元素编程并将其追加到头上:
var newScript = document.createElement("script");
newScript.src = "...";
//...
HTML解析器没有意识到我在字符串中?看起来很奇怪。 – Tristan 2010-01-31 05:16:49
你的确在为HTML逃避的问题:浏览器在你的字符串作为接近标签为解释</script>
在你的JavaScript嵌入元素 - 这样的浏览器,你的线看起来像是缺少紧密单引号:
var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px">
要修复它,因为你发现,你只需要改变</script>
到其他任何东西,如<\/script>
或\074/script>
等
您通常只需要在javascript字符串中担心的字符是双引号(如果您使用双引号引用字符串),单引号(如果您使用单引号引用字符串),反斜杠,回车符(\ r)或换行符(\ n)。
请参阅Everything you always wanted to know about </
, aka. the end-tag open (ETAGO) delimiter的详细解释。TL; DR没有必要疯狂的黑客像字符串连接或字符文字逃逸 - 只是逃避它是这样:
var snaphtml = '<\/script>';
而且,请注意,这只是针对内嵌脚本必要的。
有关详细说明,请参阅http://mathiasbynens.be/notes/etago。 – 2011-06-27 14:46:57