2010-01-31 152 views
6

我想我已經確定了ASP處理IE條件註釋(或HTML註釋一般)的方式中的錯誤經典ASP解析錯誤..當頁面包含IE條件註釋

理論上它不應該在處理它們所有因爲它們意味着客戶端..

在實踐..

<!--[if IE 6]> 
<!--include virtual="emptyfile.asp"--> 
<![endif]--> 

將返回

<![endif]> 

是的,你讀的正確..它將刪除評論的開頭包括文件中的任何內容,並保留結束評論標籤。

這個'課程會弄亂HTML和of'course使無論是爲IE瀏覽器對所有被執行...

有明顯的解決方法,如使用server.execute包括您的文件,而不是include指令,預期這將工作..

最有可能混淆包含指令的結尾-->與html評論的開頭<!-- .. 但它不應該打擾所有的HTML意見..

有沒有一個知道這樣的事情發生的原因?或者它只是一個錯誤?

+1

不確定爲什麼這是一個CW? – AnthonyWJones

+0

我沒有把它看作是一個編程問題*本身*。 –

回答

4

這不是一個錯誤。

asp include語法期望在標記註釋中找到關鍵字#include。但是,它不要求從註釋開始序列的末尾到#include關鍵字之間只有空白。因此,這是完全合法: -

<!-- pink elephants #include virtual="myinc.asp" --> 

這也是合法的: -

<!-- 
#include virtual="myinc.asp" 
--> 

現在評論裏面<!--的任何後續發生難度對待,就像任何其他的文本。因此,這仍然是合法的: -

<!-- 
<!-- #include virtual="myinc.asp" --> 

其其開始這被看作是由ASP的包括標記註釋的第一個<!--。第二個只是被忽略的文字。整個評論被替換爲「myinc.asp」文件的內容。如果該文件恰好爲空,則該評論將被簡單地刪除。

現在額外的[if IE 6]>仍然只是被忽略的文字,所以整個[if IE 6>\r\n<!--都會被忽略文字。因此: -

​​

被替換爲「emptyfile.asp」的內容。任何後續: -

<![endif]--> 

是逐字發送的。

+0

+1感謝您確認我懷疑和去細節!它非常有意義。 –

0

如果您在IE 8測試則<![endif]--><![endif]>

請檢查此鏈接爲不同版本的IE http://msdn.microsoft.com/en-us/library/ms537512%28VS.85%29.aspx

條件註釋。

+0

其實問題發生在所有的瀏覽器..因爲它是一個服務器的錯誤行爲,而不是一個客戶端.. –

+0

這不是一個錯誤,因爲在上面的答案中提到,感謝安東尼 – Ravia