2010-01-31 134 views
6

究竟需要在javascript字符串中转义什么。或者,更具体地说,为什么为什么我需要在JavaScript中转义'/'字符?

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>'; 

给出语法错误?逃避最后的<\/script>似乎修复了语法错误,但这对我来说并不合理,因为它是一个JavaScript初学者。

+2

有关详细说明,请参阅http://mathiasbynens.be/notes/etago。 – 2011-06-27 14:46:57

回答

11

问题可能在于Web浏览器看到“</script>”序列并确定脚本块结束。

另一种方式从像你这样使用转义序列一边解决这个问题是要打散成2个字符串串接:

"<" + "/script>" 

行为,你看到的是不是一个错误ñ浏览器的一部分。

浏览器不“查看”脚本块,他们只是将内容传递给脚本引擎。 “</script>”序列是他们如何知道他们已经到达块的末尾,并且由于浏览器没有解释块的内容,所以无法知道它是否在文本字符串的上下文中脚本代码。

请记住,即使浏览器不常见,浏览器也可以支持更多的脚本语言,而不仅仅是Javascript。 Internet Explorer支持VB脚本(我认为任何可以由Windows脚本主机运行的脚本语言,但我不确定)。当脚本块的功能被放入浏览器的时候,没有人能确定Javascript最终会变得如此普遍。

+0

我在Google Analytics(分析)代码中看到了这一点。 +1 – 2010-01-31 05:16:51

+0

事实上,在这种情况下你也会看到很多“”。 – JAL 2010-01-31 05:22:51

+0

这是一个错误?这似乎是一个很容易解析的事情。 – Tristan 2010-01-31 05:31:23

2

的HTML解析器将解释您的字符串标记令牌(ETAGO定界符</)的结束,作为当前脚本标签的末尾,给您未终止的字符串SyntaxError

有几种解决方法,包括使用CDATA块,但最简单的方法是逃避这个角色,或做一个字符串连接:

var snaphtml = '<script src="...">\x3C/script>'; 

var snaphtml = '<script src="..."><' + '/script>'; 

当然,你也可以创建你script元素编程并将其追加到头上:

var newScript = document.createElement("script"); 
newScript.src = "..."; 
//... 
+0

HTML解析器没有意识到我在字符串中?看起来很奇怪。 – Tristan 2010-01-31 05:16:49

4

你的确在为HTML逃避的问题:浏览器在你的字符串作为接近标签为解释</script>在你的JavaScript嵌入元素 - 这样的浏览器,你的线看起来像是缺少紧密单引号:

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"> 

要修复它,因为你发现,你只需要改变</script>到其他任何东西,如<\/script>\074/script>

您通常只需要在javascript字符串中担心的字符是双引号(如果您使用双引号引用字符串),单引号(如果您使用单引号引用字符串),反斜杠,回车符(\ r)或换行符(\ n)。

相关问题