<meta http-equiv="X-UA-Compatible" content="IE=8" /> 在 RichFaces Web 应用程序中被忽略

问题描述 投票:0回答:1

我在 Glassfish 2.1 上使用 JSF 2.0 和 RichFaces 3.3.3。我创建了一个带有模式面板的 Web 应用程序,该应用程序在我的计算机(本地服务器)中运行良好。由于 IE9 与特定 RichFaces 版本不兼容,我在 HTML 头中使用

X-UA-Compatible: IE=8
元标记:

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

当我在本地环境中部署时,模式面板如下所示:

1ok

但是当我部署在生产服务器中时,我遇到了问题。

如果我使用带有兼容性视图的 IE
(来源:geneanet.org
,我的模态面板如下所示:

如果我不使用兼容性视图,我会看到模式面板,但所有 Ajax 按钮都不起作用。

这是怎么造成的,如何解决?

jsf-2 internet-explorer-9 richfaces
1个回答
7
投票

来自 IE 开发者文档,定义文档兼容性

...

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

...

RichFaces 3.3.3 默认情况下自动包含引用 RichFaces 特定 CSS 样式表的

<link>
元素,位于头部的最顶部之前原始
<head>
模板内容。因此,具有 HTML
X-UA-Compatible
元素风格的
<meta>
标头将always 无法在 RichFaces 3.3.3 Web 应用程序中工作。它在本地开发环境中工作正常很可能是因为您已将 localhost 站点添加到浏览器配置中的 IE8 兼容站点列表中。那么
X-UA-Compatible
标头的存在就不再重要了。

最好的办法是直接在 HTTP 响应本身上设置

X-UA-Compatible
标头,而不是作为 HTML 元标记。您可以使用一个简单的 servlet 过滤器 来完成此操作,该过滤器映射到
FacesServlet
上并执行以下工作:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    ((HttpServletResponse) response).setHeader("X-UA-Compatible", "IE=8");
    chain.doFilter(request, response);
}
© www.soinside.com 2019 - 2024. All rights reserved.