2010-01-31 46 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)。

相關問題