Safari 3.0.x は、document.compatMode プロパティをサポートしていないため、ドキュメントが標準モードでレンダリングされているか、互換モードでレンダリングされているかを検出できません。Safari 3.1 以降ではサポートされています。document.compatMode が利用できない場合、Safari 3.0.x でドキュメント モードを検出するにはどうすればよいですか?
2 に答える
Googleで簡単に検索すると、「ドキュメントの互換性モードを確認する方法」が表示されます。
基本的にdiv
、quirks モードでのみ機能する無効な css スタイルで を作成します。次に、 newdiv
のスタイルをチェックして、css が受け入れられたかどうかを確認します。受け入れられた場合、ドキュメントは quirks モードになります。
コードを言い換えると:
var el = document.createElement('div');
el.style.cssText = 'position:absolute;width:0;height:0;width:1';
var compatMode = el.style.width === '1px' ? 'BackCompat' : 'CSS1Compat';
これをテストしますが、Safari を実行できません。可能であればテストして、結果をコメントで報告してください。
ほとんどの新しいブラウザにはがありますがcompatMode
、一部の古いブラウザにはありません。このようなブラウザには、デスクトップの Safari 2 や多くの Nokia 携帯電話など、Mac IE や古い WebKit が含まれます。
存在する場合document.compatMode
は、値が でないことを確認します"BackCompat"
。その場合、ドキュメントは標準モードになっています。これにより、IE の初期の結果が得られます。
それ以外の場合は、標準モードのレンダリングをサポートしている可能性がある古いブラウザーですが、プロパティdocument.compatMode
がありません。compatMode
幅を設定するための数値を持つ要素を設定する場合width
、ドキュメントは標準モードではありません。
if - else
読みやすい場合は使用できます。または、代わりに 3 項代入を使用します。
/* 2010-06-26 ギャレット スミス - BSD ライセンス */ 関数 isQuirksMode(doc) { ドキュメント = ドキュメント || 資料; var compatMode = doc.compatMode, テストスタイル、 IS_STANDARDS_MODE = compatMode ? compatMode != "BackCompat" : doc.createElement && ((testStyle = doc.createElement("p").style).width = "1", !testStyle.width); !IS_STANDARDS_MODE を返します。 }
これは、世界中の国の Nokias などのモバイル デバイスに存在する可能性のある古い Webkit バージョンに対応しています。
IE5.5 以下では true を返します。createElement
createElement が壊れているブラウザ (Opera 5 だと思います) では、存在推論チェックは失敗します。
この関数を使用して一般的な推論を行うことは避けてください。できるだけ具体的にするよう常に心がけてください。