2016-03-01 54 views
-4

我看到在https://itunesconnect.apple.com登錄頁面怪腳本:IE和奇怪的評論行爲:爲什麼要爲IE打開兩次評論?

<script> 
    //Some js 
    <!-- 
    if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-') 
    //--></script> 
    <noscript>Some text<noscript> 

據我瞭解,IE瀏覽器是這樣的:

<script> 
    //Some js 
    <!-- 
    <!-- 
    //--></script> 
    <noscript>Some text<noscript> 

,並對其他人來說是這樣的:

<script> 
    //Some js 
    <!-- 
    //--></script> 
    <noscript>Some text<noscript> 

但是目的是什麼? (這個問題是關於雙「<! - - 」而不是noscript標籤) 爲什麼在IE的腳本標籤中打開兩次HTML註釋?

+0

這可能值得您閱讀:https://developer.mozilla.org/en/docs/Web/HTML/Element/noscript –

+0

對不起,我應該指定問題不是關於該標記。 (但也許這個標籤是相關的,) – Tom

+0

'%3c' - >'<'... –

回答

1

document.write在之後立即添加它的參數它被調用的腳本標籤,而不是在標籤中。

在您的示例中,在script標記之後立即放置起始註釋標記,可以使頁面上標記的所有其餘部分對通過if條件的瀏覽器不可見。即該頁面的其餘部分將被視爲評論。產生的代碼看起來是這樣的:

<script> 
    //Some js 
    <!-- 
    if(navigator.appVersion.indexOf('MSIE')>=0)document.write(unescape('%3C')+'\!-'+'-') 
    //--> 
</script> 
<!--<noscript>Some text<noscript> 
<p>All the markup in this page will be a part of the comment in IE, if JS is enabled.</p> 

在你發現這個頁面,唯一的目的似乎是隱藏的腳本後,noscript標籤。但是,在頁面被解析之後,它將有效地隱藏在帶有JS的noscript之後附加到body之後的所有元素。

+0

是的!它可能與IE8中的該錯誤有關(即使JavaScript已啓用,樣式化的noscript也有副作用):http://mottr.am/2009/11/30/ie8-noscript-bug-fix/(我讓你更新你的回答在我驗證它之前) – Tom

+0

如果我沒有記錯的話,它在頁面的末尾,所以它只會禁用腳本,如果JavaScript打開。如果javascript關閉,javascript不會被執行;)所以它不會隱藏無腳本元素 – Tom

+1

@Tom我快速瀏覽了Apple頁面上的標記。該標籤似乎只隱藏'noscript'(並且結束'body'和'html',創建基本無效的HTML)。看起來它真的只在IE8的錯誤頁面上,儘管這是一個糟糕的黑客攻擊。 IE也有其他的錯誤,例如。在X-UA meta之前定義DTD的樣式標籤。另請參閱我對安德魯答案的評論(對不起,錯別字)。 – Teemu

1

這是沒有必要打開評論的兩倍。 (第二開口標記實際上被視爲註釋身體的一部分),據微軟開發者網絡和它們所提供的documentation,標準的HTML註釋的風格:

<!-- 
Insert HTML comment here. 
--> 

條件註釋也支持用在下面的樣式使用括號:

<!--[if expression]> 
HTML 
<![endif]--> 

<![if expression]> 
HTML 
<![endif]> 

更新

回來時,客戶端腳本是新的瀏覽器,舊的瀏覽器可能不支持了正在使用的腳本。如果瀏覽器無法識別該腳本,則該腳本將以文本形式打印出來,因此需要採取一種解決方法,以防止舊瀏覽器將腳本打印爲網頁上的文本。該頁面底部的註釋從您提供的鏈接中可以看出,這些解決方法之一是防止腳本打印的一個示例。

<!-- 
    script here 
//--> 

如果腳本是由瀏覽器的支持,然後<!--將被解釋爲單行註釋,並//-->也將是一個單行註釋,因爲//開始在一個單行註釋腳本。否則,如果腳本是由瀏覽器不支持,那麼//不會被解釋爲註釋的腳本中(瀏覽器會認爲這只是普通文本),所以<!-- ... // -->會被理解爲一個多行註釋。這樣,如果瀏覽器支持腳本,它將被讀作腳本,否則,它只會被註釋掉。

+0

是的。但有人花時間爲IE寫了特定的js,它困擾着我:爲什麼? (全面披露:我在蘋果網站上看到它) – Tom

+2

您能提供一個鏈接到您看到它的頁面嗎? – Andrew

+0

你可以在登錄頁面的底部看到它https://itunesconnect.apple.com – Tom