2010-10-04 113 views
0

我有以下簡單的XSL樣式表:瀏覽器的行爲 - 從火狐IE/Chrome有什麼不同

<?xml version="1.0" encoding="windows-1252"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns="http://www.w3.org/1999/xhtml" version="1.0"> 
    <xsl:output encoding="utf-8" method="html" /> 

    <xsl:template match="/"> 

    <xsl:text disable-output-escaping="yes"> 
    &lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; 
     </xsl:text> 
    <html> 
     <head><title>hello world</title></head> 
     <body> 
     <p>hello world</p> 
     </body> 
     </html> 
    </xsl:template> 

    </xsl:stylesheet> 

當我使用它時,Internet Explorer 7和Safari 5.0.2都只是顯示的 「Hello World」 ,如預期。不過,Firefox 3.6.10顯示不同的東西:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

hello world 

我猜,火狐走的是第一的xsl:text命令從字面上,而IE和Safari把它當作頁面的一部分。 IE和Safari是否正確渲染這個,或者是Firefox?

(我做了xsl:文本的東西,使MSXML庫輸出正確的標籤爲HTML5規範)

回答

1

要輸出中DOCTYPE聲明STANDAR模式渲染不需要現代瀏覽器。只有IE瀏覽器有一些問題:它以標準模式呈現,但丟失了CSS引擎的新功能(例如,IE7回滾到IE6)。

xsl:output聲明是最好的工具,但某些Opera版本在使用PUBLIC和SYSTEM標識符輸出聲明時遇到fn:document問題。我應該測試Opera 10.X的新行爲,Opera 9.X的市場份額非常低。

唯一的解決方法是輸出DOCTYPE聲明(DOE文本),但僅適用於IE:您可以使用system-property函數測試xsl:vendor

+0

我剛剛試過Opera 10.62,顯然它根本不想顯示任何XSL。有做這項工作的祕密技巧嗎? – Colen 2010-10-05 16:23:41

+1

@Colen:我有一箇舊的XML/XSLT驅動的跨瀏覽器網站[here](http://www.aranedabienesraices.com.ar)。隨意重複使用此代碼。 – 2010-10-05 16:40:09

+0

非常感謝! – Colen 2010-10-05 19:20:16

相關問題