<meta http-equiv="X-UA-Compatible" content="IE=8" /> 在 RichFaces webapp 中被

Posted

技术标签:

【中文标题】<meta http-equiv="X-UA-Compatible" content="IE=8" /> 在 RichFaces webapp 中被忽略【英文标题】:<meta http-equiv="X-UA-Compatible" content="IE=8" /> ignored in RichFaces webapp 【发布时间】:2012-09-05 15:40:30 【问题描述】:

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

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

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

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

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

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

这是怎么引起的,我该如何解决?

【问题讨论】:

【参考方案1】:

来自 IE 开发者文档,Defining Document Compatibility:

...

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

...

RichFaces 3.3.3 默认自动包含&lt;link&gt; 元素,这些元素指的是头部非常顶部 中的RichFaces 特定CSS 样式表,之前 原始&lt;head&gt; 模板内容。因此,HTML &lt;meta&gt; 元素风格的 X-UA-Compatible 标头总是无法在 RichFaces 3.3.3 web 应用程序中工作。它在您的本地开发环境中运行良好很可能是因为您已将 localhost 站点添加到浏览器配置中的 IE8 兼容站点列表中。那么X-UA-Compatible 标头的存在就不再重要了。

最好的办法是直接在 HTTP 响应本身上设置 X-UA-Compatible 标头,而不是作为 HTML 元标记。你可以用一个简单的servlet filter 来做到这一点,它映射在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);

【讨论】:

以上是关于<meta http-equiv="X-UA-Compatible" content="IE=8" /> 在 RichFaces webapp 中被的主要内容,如果未能解决你的问题,请参考以下文章

在网页<head>标签之间都会加<meta http-equiv="Content-Type" content="text/html;chars

通过meta设置多内核浏览器使用webkit内核解析<meta http-equiv = "X-UA-Compatible" content = "IE=edge(

<meta http-equiv="X-UA-Compatible" content="IE=8" /> 在 RichFaces webapp 中被

BootStrap<meta http-equiv="X-UA-Compatible" content="IE=edge" /; 的说明

标签 <Meta http-equiv="X-UA-Compatible" ..> 用于 Iframe 在 IE8 中不起作用

meta http-equiv="X-UA-Compatible" content="IE=edge" 对非 IE 浏览器有影响吗?