首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Webcenter Spaces和Internet Explorer 9

Oracle Webcenter Spaces和Internet Explorer 9
EN

Stack Overflow用户
提问于 2012-08-24 17:11:37
回答 1查看 2K关注 0票数 4

我正在开发一个WebCenter Spaces应用程序,在跨浏览器测试过程中观察到了一些奇怪的行为:

当使用Internet Explorer 8访问站点时,Spaces相当合理地插入了这个meta标签:

代码语言:javascript
复制
<meta http-equiv="X-UA-Compatible" content="IE=8.0">

但是,当使用Internet Explorer 9访问它时,兼容性视图已启用,将添加以下标记:

代码语言:javascript
复制
<meta http-equiv="X-UA-Compatible" content="IE=7.0">

这强制要求实际使用兼容性视图。雪上加霜的是,弹出一个警告对话框,通知用户必须禁用兼容性视图才能使用应用程序。

当兼容性视图被禁用时,Spaces发送一个在这种情况下完全不执行任何操作的标记:

代码语言:javascript
复制
<meta http-equiv="X-UA-Compatible" content="IE=9.0">

在一般原则上,为什么不将此标记发送给IE9?这会禁用兼容模式并正确呈现页面吗?如何自定义WebCenter Spaces以正确支持IE9?

版本信息:目前使用的是WebCenter 11.1.1.6,但我们将迁移到11.1.1.5 (别问了)--我正在Windows Server2008 R2标准版x64上测试IE9。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-24 21:21:55

可悲的是,ADF在User-Agent头中添加了基于MSIE属性的X-UA-Compatible标签。据我所知,覆盖此行为的唯一方法是使用servlet过滤器。其中您可以通过User-Agent中Trident属性确定IE引擎版本,并设置适当的X-UA-Compatible标记。我们成功地将以下代码用于servlet筛选器:

代码语言:javascript
复制
public void doFilter(ServletRequest request, ServletResponse response, 
        FilterChain filterChain) throws IOException, ServletException {

    HttpServletRequest httpReq = (HttpServletRequest)request;
    String ua = httpReq.getHeader("User-Agent");

    Pattern patternEngineIE = Pattern.compile(".*Trident/(\\d).*");
    Matcher mEngineIE = patternEngineIE.matcher(ua);

    if (mEngineIE.find()) {
        int versionEngineIE = Integer.parseInt(mEngineIE.group(1));
        switch (versionEngineIE) {
        case 4:
            ua = ua.replaceAll("MSIE 7.0", "MSIE 8.0");
            response.addHeader("X-UA-Compatible", "IE=8");
            break;
        case 5:
            ua = ua.replaceAll("MSIE 7.0", "MSIE 9.0");
            response.addHeader("X-UA-Compatible", "IE=9");
            break;
        case 6:
            ua = ua.replaceAll("MSIE 7.0", "MSIE 10.0");
            response.addHeader("X-UA-Compatible", "IE=10");
            break;
        }
    }

    httpReq.addHeader("User-Agent", ua);
    filterChain.doFilter(httpReq, response);
}

因此,我们通过Trident属性来确定IE版本,IE8为4,IE9为5,甚至兼容模式也是如此。但在兼容模式下,IE8和IE9添加了MSIE 7.0属性,我们根据引擎版本将其替换为MSIE 8.0MSIE 9.0

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12106365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档