デフォルトでは、IE8はイントラネットWebサイトを強制的に互換モードにします。メタヘッダーをIE8に変更してみましたが、メタヘッダーを認識せず、ブラウザーの設定を使用しています。これを無効にする方法を知っている人はいますか?
デフォルトでは、IE8はイントラネットWebサイトを強制的に互換モードにします。メタヘッダーをIE8に変更してみましたが、メタヘッダーを認識せず、ブラウザーの設定を使用しています。これを無効にする方法を知っている人はいますか?
回答:
イントラネットの互換モードを無効にすることができます。
IISの場合、以下のコードをweb.configに追加するだけです。IE9で私のために働いた。
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Apacheと同等:
Header set X-UA-Compatible: IE=Edge
そしてnginxの場合:
add_header "X-UA-Compatible" "IE=Edge";
そして、express.jsの場合:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyenは正しいですが、少し複雑です...
Paul Irishの素晴らしいボイラープレートを使用している場合は、次のようになります。
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
これは期待どおりに機能せず、IEでイントラネットの互換モードに強制しますイントラネットサイトを互換表示で表示する]がいる場合環境ます。イントラネット互換モードを回避するには、条件付きIEコメントを削除する必要があります。
したがって、次のコードは機能します。
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
基本的に、<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
ステートメントの前に条件付きのIEコメントをトリガーすると、デフォルト設定でIE9を実行している場合、イントラネット環境で互換モードに強制されます。
更新—追加情報: ただし、HTML5ボイルプレートを機能させるトリックがあることに注意してください。
DOCTYPEの前に空の条件付きコメントを追加します。あなたが行うときとノートだけでなくとして、ということを、あなたはできるも周りの条件付きコメントを追加するX-UA-Compatible
だけでなく、ページがHTML5-有効作り、ディレクティブ。たとえば:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
この回答の最初の部分に触発されたブログの記事は、より詳細な情報を持っています。ちなみに、そのブログ投稿で述べたように、DOCTYPEの前の条件付きコメントを、条件なしの半条件付きコメントに置き換えることもできます<!--[]-->
。したがって、そのように:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
ただし、後者のバリアント(<--[]--><!DOCTYPE html>
)は、たとえば別の質問に対するこの回答で説明されているように、X-UA-Compatioble
(IE7およびIE6の)をサポートしていないレガシーIEバージョンの場合、ブラウザを癖モード。
[ツール]メニューをプルダウンして[互換表示設定]を選択すると、下部のダイアログにある[イントラネットサイトを互換モードで表示する]が設定されます。これをオフにすると、問題が解決し、IEはDOCTYPEに基づくモードを使用します。
この質問に対する回答には、ある程度の混乱があります。
一番上の答えは現在、httpヘッダーにフラグを設定するサーバー側のソリューションで、一部のコメントはメタタグを使用したソリューションが機能しないことを示しています。
このブログエントリは、互換性メタ情報の使用方法の優れた概要を提供し、私の経験では、説明どおりに機能すると思います。http: //blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-compatible-to-create-durable-enterprise-web-applications.aspx
主なポイント:
1つの重要な点(この点から多くの混乱が生じると思います)は、IEにモードの2つの「クラス」があることです。
ドキュメントモードは、レンダリングエンジンを決定します(Webページのレンダリング方法)。
ブラウザモードは、IEがサーバーに送信するユーザーエージェント(UA)文字列、ドキュメントモードIEのデフォルト値、およびIEが条件付きコメントを評価する方法を決定します。
ドキュメントモードとブラウザモードの詳細については、次の記事を参照してください。http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site-developers.aspx?Redirected = true
私の経験では、互換性メタデータはドキュメントモードにのみ影響します。したがって、ブラウザの検出に依存している場合、これは役に立ちません。ただし、機能検出を使用している場合は、これが適切な方法です。
したがって、次の構文を使用して(htmlページで)メタタグを使用することをお勧めします。
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
注意:テストしたブラウザモードのリストを提供してください。
このブログ投稿では、EmulateIEXの使用を禁止しています。ここに引用:
そうは言っても、私が奇妙だと思うことの1つは、アプリケーションがEmulateIE7またはEmulateIE8を要求するときです。これらのエミュレートモードは、それ自体が決定です。したがって、あなたが望むものを特定するのではなく、2つのことの1つを求め、DOCTYPEのコードの他の場所を探して、これら2つのことのどちらかを決定します(そして、そのDOCTYPEが標準を与えるかどうかを理解しようとしますまたはその内容に応じて奇妙な–別の時々混乱するタスク)。それを行うのではなく、それ自体が質問である応答を与えるよりも、あなたが望むものを直接指定するほうがはるかに理にかなっていると思います。IE7標準が必要な場合は、IE = EmulateIE7ではなく、IE = 7を使用してください。(これは、DOCTYPEを使用してはならないという意味ではありません–使用する必要があります。)
このメタタグを試してください:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
[互換性ビューにイントラネットサイトを表示する]がオンになっている場合でも、IE8をIE8標準モードとして強制的にレンダリングする必要があります(イントラネットまたはすべてのWebサイトの場合)、IE 8.0.6で試してみました
私たちのシステム管理者は、組織全体のチェックボックスをオフにすることでこの問題を解決しました。ユーザーはログオフする必要すらありませんでした。
チェックしたイントラネット互換ビューを上書きできるようにする実用的な答えを見つけました。次の行をページのOnInitイベントに追加するだけです(metaまたはweb.config customHeaderは必要ありません)。
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
ヘッダーに以下を入れてみてください:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
提供:Paul IrishのHTML5ボイラープレート(ただし、XHTML Transitionalでも機能します)。
最初のメタタグだけでなく、VERY FIRST TAGとしてのみ、headセクションでメタタグをTHE FIRST TAGとして指定することで、互換モードをオーバーライドできました。
あなたの素晴らしい答えで私をそれに入れてくれた@ stefan.sに感謝します。それを読む前に、私は:
これは機能しませんでした
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
リンクタグを邪魔にならない場所に移動し、それが機能しました
この作品:
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
したがって、互換性を使用するように設定されたIE8クライアントは、ページをIE8標準モードとしてレンダリングします。content= 'IE = 9'は、IE9までの使用可能な最高の標準を使用することを意味します。
これは正確な解決策ではありませんが、私はそれが最良の解決策だと感じています。私たちのイントラネットサイトでは、Firefoxでのみアクセスできることをユーザーに伝えています。このあたりのIEユーザーには親切に対応していません。サーバーまたはクライアント側のユーザーエージェントを確認し、IEからのアクセスを拒否します。そして、私は.NETプログラマーです。
私はこの問題に苦労しており、独自のソリューションと洞察を提供する手助けをしたいと思っていました。
特定のAJAXベースのフレームワークは、最初にJavaScriptとスタイルシートを挿入し<head>
ます。これを行うと、確立されたメタタグソリューションが適切に機能しなくなるようです。この場合、Andras Csehiの回答のように、HTTP応答ヘッダーに直接挿入することで問題が解決することがわかりました。
ただし、Javaサーブレットを使用している人にとっては、これを解決する良い方法はServletFilterを使用することです。
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
この問題をSpring-Apache-tomcat環境で解決するには、RequestInterceptorメソッドに1行追加します。
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
参照元- フィルターの作成方法と応答ヘッダーの変更方法RequestInterceptor(Spring)を介してこの問題を解決する方法について説明します。
WebサイトでIE 8標準モードを強制する場合は、有効なDOCTYPEとともにこのメタタグを使用します。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
プレーンな「IE8」ではなく、「EmulateIE8」の値に注意してください。
IE開発者によると、これは「IE8標準モードで標準DOCTYPEを表示し、互換モードで互換DOCTYPEを表示します。このタグを使用して、クライアントマシンの互換性ビューを上書きし、標準をIE8標準に強制します。」
このIEブログ投稿の詳細:http : //blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
この質問は、イントラネットのブラウザモード「Internet Explorer 8」の複製です。。
そこでの応答は、互換性ビュー(サーバー側)を無効にすることができないことを示しています-https://stackoverflow.com/a/4130343/24267。私が試した提案のどれもうまくいかなかったので、それは確かにそうです。IE8では、送信するX-UA-Compatibleヘッダーの種類に関係なく、「ブラウザーモード」がInternet Explorer 8互換表示に設定されます。
IE7と互換モードの特別な処理を行う必要がありました。これにより、ブラウザーはIE8を使用してレンダリングされましたが、IE7であると報告され、コードが破損しました。これは私のコードを修正した方法です(これは恐ろしいハックであり、ブラウザーのバージョンではなく機能をテストする必要があることを認識しています)。
isIE8 = navigator.appVersion.indexOf( "MSIE")!= -1 && parseFloat(navigator.appVersion.split( "MSIE")[1])== 8; if(!isIE8 && navigator.appVersion.indexOf( "MSIE")!= -1 && parseFloat(navigator.appVersion.split( "MSIE")[1])== 7 && navigator.appVersion.indexOf( "Trident") != -1){ //うそつき、これは互換モードのIE8です。 isIE8 = true; }
これをページのヘッドタグ内に追加します(目的のIEバージョンをターゲットにします):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
注、これは、ブラウザがその中に互換モードと言う事実は変わりません(ブラウザモードと呼ばれる)が、ページがします IE8標準モードでレンダリングを。それでも希望どおりにレンダリングされない場合は、おそらくIEのバージョンを誤ってチェックしているJavaScriptがあるためです。メタX-UA-Compatibleタグを設定した場合でも、ユーザーエージェント文字列には引き続きMSIE 7.0と表示されるため、次のブログ投稿を参照して、キーオフするプロパティを決定してください。
私の場合、修正のために、IE7互換モードのチェックを追加する必要がありました。私は単純なjavascriptコードを使用してそうしました:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
すべてのユーザーに対してGPO経由でこれを無効にするためにこれを読んでいる他の人にとって、これは設定です:
コンピューターの構成/管理用テンプレート/ Windowsコンポーネント/ Internet Explorer /互換表示/ローカルイントラネットのInternet Explorer標準モードをオンにする
web.config編集で修正されましたが。
.htaccessのヘッダーを変更する
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
ここでこの問題の解決策を見つけました:https : //github.com/h5bp/html5-boilerplate/issues/378
ドキュメントモードとブラウザモードについてのStefan Sのコメントは、私の問題に非常に適切でした。
ページにX-UA-Contentメタデータがありますが、を介してクライアント側でブラウザーのバージョンをテストしていましたnavigator.appVersion
。このテストでは、ドキュメントモードではなくブラウザモードが提供されるため、メタデータは反映されません。
私の答えはdocument.documentMode
次のようなものをテストすることでした:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
これで、メタX-UA-Contentタグがブラウザーテストに反映されました。
ブラウザーのテストなど、眉をひそめるようなことをするのはなぜですか?速度。tablesorterなどのさまざまなjQueryアドインは、IE6 / 7では遅すぎるので、オフにしたいと思います。それ以外の場合は、ブラウザー機能のテストがこれを解決するのに役立つかどうかはわかりません。