IE9渲染IE8文档标准

3
我需要让我的应用程序在IE9文档标准下运行,但我无法弄清为什么它自动渲染为IE8文档标准。
我正在使用JSF 2.1.17和Primefaces 3.4,在Glassfish 3.1.2中运行。我的IDE是Netbeans-7.1.2。当我在IE中打开开发人员工具,在“HTML”选项卡下显示:
<--!DOCTYPE html-->
<html  xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

然而,在“脚本”选项卡下,它显示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML lang=en xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<HEAD>
<META content="IE=8.0000" http-equiv="X-UA-Compatible">

我已经查看了所有的页面和模板,但是没有任何地方可以找到上面显示的meta content="IE=8.0000"或!DOCTYPE。这很奇怪。

我的所有页面都有:

<!DOCTYPE html> 

我的主模板有这个:

<!DOCTYPE html> 

<html   xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" 
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core">

其他页面有:

<!DOCTYPE html>

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:p="http://primefaces.org/ui"
                template="/layout/someFile.xhtml" >

以下是我尝试过的方法:

1)将Glassfish JSF更新至2.1.17版本,因为我在阅读资料时发现旧版Mojarra存在一个bug,导致它忽略了DOCTYPE。

2)我添加了:

<meta http-equiv="X-UA-Compatible" content="IE=9" > 

我尝试在每个页面中添加代码,希望可以强制IE9浏览器使用,但是这并没有起作用。

3) 我接着尝试使用content="IE=Edge"的代码,但是还是没有改变。

4) 我改变了DOCTYPE为:

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

我不确定XHTML需要这个严格的DOCTYPE才能正确渲染。但这并没有起作用。

任何帮助都将是极好的。我已经做了很多研究,试图解决这个问题,但我是一个新手,所以我的理解非常有限。


1
浏览器实际检索的源是什么?右键单击,查看源代码。在Firefox/Chrome等中是否相同?至于meta标签,请参见此重复项http://stackoverflow.com/questions/13742786/scrollable-div-only-scrolls-structure-but-not-data-of-primefaces-datable-in-ie8/13743222#13743222 - BalusC
浏览器检索到的源代码是正确的。在FF/Chrome/Safari中都是相同的。唯一的问题是文档模式。我需要在每个页面或只有模板页面中添加<f:facet name="first"><meta http-equiv="X-UA-Compatible" content="IE=Edge" /> </f:facet>吗? - patient957
1
将元标记包装在 facet 中解决了问题。有没有一个好的来源可以阅读更多关于何时在 facet 中包装标记的信息? - patient957
@patient957,我很高兴你解决了这个问题,这很奇怪。也许你可以发布你的发现作为自我回答,以便于未来寻找此问题的访问者受益? - maple_shaft
1个回答

5

I added:

<meta http-equiv="X-UA-Compatible" content="IE=9" > 

to every page, hoping it would enforce IE9, but this did not work.

根据MSDN文档关于这个元标记的说明,X-UA-Compatible头部不区分大小写;但是,它必须出现在网页的头部(HEAD部分)中,除了标题元素和其他meta元素之外,它必须出现在所有其他元素之前。如果您仔细研究JSF/PrimeFaces生成的HTML,您会发现有一个PrimeFaces特定的<link>元素排在它前面,这会阻止X-UA-Compatible头部发挥作用。PrimeFaces 支持<h:head>的几个方面,以便您可以控制头部资源的排序。以下内容应该适合您:
<f:facet name="first">
    <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
</f:facet>

这与标准的JSF无关,只适用于PrimeFaces。


再次感谢,非常有帮助并解决了问题。 - patient957
那正是我正在寻找的。再次感谢。 - Darka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接