究竟需要在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