java - Oracle Webcenter Spaces 和 Internet Explorer 9

标签 java oracle oracle-adf webcenter

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

当使用 Internet Explorer 8 访问站点时,Spaces 很可能会插入此元标记:

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

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

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

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

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

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

为什么这个标签不按一般原则发送到 IE9?这将禁用兼容模式并正确呈现页面,或者不正确?如何自定义 WebCenter Spaces 以正确支持 IE9?

版本信息:目前使用 WebCenter 11.1.1.6,但我们将迁移到 11.1.1.5(不要问)- 我正在 Windows Server 2008 R2 Standard x64 上使用 IE9 进行测试。

最佳答案

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

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

关于java - Oracle Webcenter Spaces 和 Internet Explorer 9,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12106365/

相关文章:

java - 创建弹出窗口(不是表单)以在 ADF 中上传文件

javascript - WebCenter 站点样式表

java - 在 Java 中使用传递子类数组作为它们的父类

oracle - MySQL 等同于 ORACLES rank()

java - Log4j2:能够在多用户环境下记录不同日志级别的数据

c# - 具有特殊(丹麦语)字符的 Oracle 表列名称。无法执行sql查询

oracle - 有没有简单的方法来备份Oracle SQL Developer用户片段?

java - 我必须将 hibernate 设置为 weblogic 吗?

java - 如何将失败情况处理成一个简单的 Java 应用程序?

java - 如何创建包含多个单个字母的随机长度字符串?