4

私は WebCenter Spaces アプリケーションに取り組んでおり、クロス ブラウザ テストの過程でいくつかの奇妙な動作を観察しました。

Internet Explorer 8 でサイトにアクセスすると、Spaces が次のメタ タグを挿入する可能性が非常に高くなります。

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

ただし、互換表示が有効な Internet Explorer 9 でアクセスすると、次のタグが追加されます。

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

これにより、互換ビューが実際に使用されます。けがに侮辱を加えるために、アプリケーションを使用するには互換表示を無効にする必要があることをユーザーに通知する警告ダイアログがポップアップ表示されます。

互換表示が無効になっている場合、この場合、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 をテストしています。

4

1 に答える 1

2

悲しいことですが、ADFはUser-AgentヘッダーのプロパティにX-UA-Compatible基づいてタグを追加します。MSIE私の知る限り、この動作をオーバーライドする唯一の方法は、サーブレットフィルターを使用することです。TridentUser-AgentのプロパティによってIEエンジンのバージョンを判別し、適切なX-UA-Compatibleタグを設定できます。サーブレットフィルタに次のコードを正常に使用しました。

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.0たりMSIE 9.0、エンジンバージョンに基づいたりするプロパティを追加します。

于 2012-08-24T13:21:54.833 に答える