3

我需要我的应用程序以 IE9 文档标准运行,但我无法弄清楚为什么它会自动以 IE8 文档标准呈现。

我正在使用在 Glassfish 3.1.2 中运行的 JSF 2.1.17 和 Primefaces 3.4。我的 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 存在一个错误,导致它忽略 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 才能正确呈现。但这没有用。

任何帮助都会很棒。我做了很多研究试图解决这个问题,但是我是网络开发的新手,所以我的理解非常有限。

4

1 回答 1

5

我补充说:

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

到每个页面,希望它会强制执行 IE9,但这不起作用。

根据有关此元标记的MSDN 文档,

X-UA-Compatible 标头不区分大小写;但是,它必须出现在网页的标题(HEAD 部分)中,位于除标题元素和其他元元素之外的所有其他元素之前。

this 必须出现所有其他元素 expect for<title>和其他<meta>元素之前。如果您仔细研究 JSF/PrimeFaces 生成的 HTML,您会发现在此<link>之前有一个 PrimeFaces 特定元素会阻止X-UA-Compatible标头执行其工作。

PrimeFaces支持多个方面,<h:head>以便您可以控制头部资源的排序。以下应该为您做:

<f:facet name="first">
    <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
</f:facet>

同样,这是特定于 PrimeFaces,而不是标准 JSF。

于 2013-02-13T02:16:53.833 回答