134

比較的厳密な Doctype と HTML マークアップを備えたページがあり、準拠にかなり近いものの、おそらく制御できないユーザー コンテンツが原因で、いくつかのばかげた方法で見落としているページがあるとします。管理システムまたはコンテンツ管理システムのテーマで、いくつかの基本的な構造を制御し、JavaScript が必要ですが、ページに入る他のすべてについては責任を負いません。

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

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

4

9 に答える 9

164

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

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

Chrome、Safari、および IEでは、アドレス バーで次の JavaScript を実行します。

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

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

于 2009-03-09T17:02:44.513 に答える
20

JavaScript でレンダリング モードを照会できるため、ページが使用しているレンダリング モードを示すBookmarkletを使用できます。

私に適したこのレンダリングモードのブックマークレットを見つけました:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');
于 2009-10-30T09:53:05.550 に答える
12

「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では、実際にはエラーではありませんが、クァークズモードが強制されます(ファイルの最初の行が宣言でない場合は、完全にぐらつくだけです)。タイプ/癖のクイックリストはここにあります

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

<a href="javascript:alert(document.compatMode);">What mode am I?</a>
于 2009-03-09T17:23:24.493 に答える
4

http://www.quirksmode.org/css/quirksmode.htmlによると:これらのリストの概要の比較表: http://hsivonen.iki.fi/doctype/ "

お役に立てれば

于 2009-03-09T17:06:56.997 に答える
2

クァークズモードを正しく理解していれば、宣言されたDoctypeに対して検証されないページでは、クァークズモードをトリガーするのに十分ではありません。正しく表示されません。

さまざまなブラウザが各Doctypeを処理する方法を決定するために私が見つけた最高のリソースは、ここにあります。

于 2009-03-09T17:23:30.313 に答える
2

IE に (doctype を介して) 厳密にする必要があることを伝えた場合、ページの途中で変更されることはありません。

于 2009-03-09T17:02:58.707 に答える
0

html5 ページでは、" <!DOCTYPE html>" で始まるページを記述し、document.compatMode='CSS1Compat' に変更できます。

于 2013-03-05T08:09:06.993 に答える