ブラウザが「奇妙な」モードにあるかどうかを確認するにはどうすればよいですか?


128

かなり厳密なdoctypeとHTMLマークアップを備えたページがあり、それにほぼ準拠しているが、おそらくユーザーのコンテンツが制御不能なために、いくつかのばかげた方法で見落としているとしましょう...コンテンツで作業しているとしましょう管理システムまたはコンテンツ管理システムのテーマであり、基本的な構造をいくつか制御し、JavaScriptが必要ですが、ページに入る他のすべてのことについては責任を負いません。

ブラウザーがより標準に準拠したエンジンを使用するのではなく、「quirks」モードに移行することを決定した場合、どのようにして(または:何を決定するのか)を判断できますか?

もちろん、IE、Chrome、Safari、Firefoxはすべて異なる方法で処理するため、主要なブラウザーのそれぞれについて回答を探しています。単一のエラーでそれを強制するのに十分ですか、それとも余裕がありますか?

回答:


159

FirefoxとOperaブラウザがページの情報を確認することで、「Quirksモード」であるかどうかを判別することができます。

を使用するとdocument.compatMode、ほとんどのブラウザで使用しているモードがわかります。

ではクローム、サファリ、およびIE、アドレスバーにこのJavaScriptを実行します。

 javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')

javascript:最近のセキュリティ変更のため、アドレスバーに貼り付けた後、その部分を再入力する必要があることに注意してください)


古いページを「EDGE」モードに強制するときに遭遇したIEには別の潜在的な値があります。値は "BackCompat"でした
グレッグウッズ

DOCTYPEを完全に無効なものに設定すると、ChromeでもBackCompatが表示されました。この回答のコードによると、値がCSS1Compat以外の場合は、quirksモードです。それは本当ですか?すべての可能な値は何ですか?
still_dreaming_1 2016

どうやらBackCompatibleは「互換性」/「互換性」モードの標準値です。2つの値のみがあります:developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1


11

「1つのエラーでそれを強制するのに十分ですか、それとも余裕がありますか」という実際の特定の質問に対する完全な回答。それは完全にエラーに依存するということです。例えば、

<!-- Comment -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

実際にはエラーではありませんが、IE 6および7でquirksモードを強制します(ファイルの最初の行が宣言ではない場合、合計がぐらつくだけです)。タイプ/癖のクイックリストはここにあります

テストのためにHTMLに次の行を貼り付けてみてください(非常に悪いjavascriptの振る舞いはここで受け渡します-申し訳ありません...これがライブにならないようにしてください:)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>

JavaScriptテスターに​​感謝します。奇妙なモードをエスケープするための最初の2回の試行が機能しなかったためです。
Noumenon 2013

css1compat!=癖モード?
Mike Cole

4

http://www.quirksmode.org/css/quirksmode.htmlによれば、「問題は、quirksモードで記述された一部のページにdoctypeが含まれていたことです。そのため、各ブラウザには、quirksモードをトリガーするdoctypeを含む独自のリストがあります。このブラウザを参照してくださいこれらのリストの概要の比較表:http : //hsivonen.iki.fi/doctype/ "

お役に立てれば


3

IEに(doctypeを介して)厳格でなければならないことを伝えた場合、ページの途中で気が変わることはありません。


2

Quirksモードを正しく理解している場合、宣言されたDoctypeに対して検証されないページでは、Quirksモードをトリガーできません。正しく表示されません。

さまざまなブラウザが各doctypeをどのように処理するかを決定するために私が見つけた最高のリソースがここにあります


2

Web Developer Toolbarアドオンを備えたFirefoxの場合、バーの右側にあるアイコンのトリオを見ることができます。左端にあるのは、現在どのモードにいるかを示しています。


2

IEでは、開発ツール(F12を押す)に表示されます。メニューに表示されます。ドキュメントモード:...別のモードを強制することもできます。


これは質問の要点を逃しています。それは、互換モードの1つのパスと標準モードの別のパスを実行するJavaScriptを作成するのに役立ちません。
Joel Coehoorn 2013

実際には、JavaScriptでそれを行う方法を尋ねたのではなく、ブラウザが使用するモードを知る方法を尋ねました。とにかく、あなたがそれを意味しなかったとしても、それはそれを探す他の人を助けるかもしれません、私自身はFirefoxでそれを知る方法を知る必要があり、この質問に行きました。
Ronen Festinger 2013

@JoelCoehoorn実際の問題は、「比較的厳密なdoctype」が何であるかを説明しなかったことです。
リスター氏2013年

0

html5ページで、「<!DOCTYPE html>」と記述します。ページから開始して、document.compatMode = 'CSS1Compat'に変更できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.