2010-10-04 115 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

相关问题