両方が同じオブジェクトを参照する必要がありますか?
W3Cによると、それらは同じです。実際には、クロスブラウザの安全性のために、window.location
ではなくdocument.location
を使用する必要があります。
現在の場所オブジェクトを取得する標準的な方法はwindow.location
です( 1996年のこのMSDNページ および 2006年のW3Cドラフト を参照)。
これをdocument.location
と比較してください。元は現在のURLを文字列としてのみ返していました( MSDNのこのページ を参照)。おそらく混乱を避けるために、document.location
はdocument.URL
に置き換えられました( こちらMSDN を参照)。これは DOMレベル1 の一部でもあります。
私の知る限り、最新のブラウザはすべてdocument.location
をwindow.location
にマッピングしますが、window.location
を好みます。これは、最初のDHTMLを書いて以来使用してきたものです。
window.location は、すべての準拠ブラウザで読み取り/書き込み可能です。
document.location は、少なくともInternet Explorerでは読み取り専用ですが、Geckoベースのブラウザー(Firefox、SeaMonkey)では読み取り/書き込みが可能です。
document.location
はもともと読み取り専用のプロパティでしたが、 Geckoブラウザー を割り当てることもできます。クロスブラウザの安全性のために、代わりにwindow.location
を使用してください。
続きを読む:
興味深いことに、「location」という名前のフレーム、画像、またはフォームがある場合、「document.location」は、Locationオブジェクトの代わりに、それぞれフレームウィンドウ、画像、またはフォームへの参照を提供します。どうやら、これはdocument.forms、document.images、およびwindow.framesコレクション名のルックアップがwindow.locationへのマッピングよりも優先されるためです。
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
私の知る限り、両方とも同じです。クロスブラウザの安全性のために、window.location
ではなくdocument.location
を使用できます。
最新のブラウザはすべてdocument.location
をwindow.location
にマッピングしますが、window.location
を好みます。これは、最初のWebページを書いてから使用したものだからです。より一貫しています。
document.location === window.location
がtrue
を返すことも確認できます。これは、両方が同じであることを明確にします。
document.location === window.location
はtrue
を返します
また
document.location.constructor === window.location.constructor
はtrue
です
注:Firefox 3.6、Opera 10およびIE6でテスト済み
はい、それらは同じです。これは、ブラウザーJS APIの多くの歴史的な癖の1つです。やってみてください:
window.location === document.location
window.locationは、古いブラウザを考慮して、2つの信頼性の高い一貫性があります。
Html 5はフレームセットをサポートしなくなったため、最近では違いが見られることはほとんどありません。しかし、フレームセットを作成した時点では、document.locationはコードが実行されているフレームのみをリダイレクトし、window.locationはページ全体をリダイレクトしていました。
window.location
は、現在の URL を取得するより信頼性の高い方法です。以下は、URLにハッシュパラメーターを追加して後で読み取るシナリオの1つで前面に出てきたwindow.location
とdocument.url
の違いです。
URLにハッシュパラメーターを追加した後。
古いブラウザーでは、document.url
を使用してURLからハッシュパラメーターを取得できませんでしたが、window.location
を使用すると、URLからハッシュパラメーターを取得できました。
したがって、window.location
を使用することを常にお勧めします。
document.location.constructor === window.location.constructor
はtrue
です。
document.location===window.location
からわかるように、まったく同じオブジェクトだからです。
そのため、コンストラクターや他のプロパティを比較する必要はありません。
まあ、彼らは同じですが、....!
window.location
は、一部のInternet Explorerブラウザーで動作していません。
少なくともIEでは、ローカルファイルに少し違いがあります。
document.URLは「file:// C:\ projects\abc\a.html」を返します
しかし、window.location.hrefは「file:/// C:/projects/abc/a.html」を返します
1つはバックスラッシュ、もう1つはスラッシュです。
実際、両方のchromeの違いに気づきます。たとえば、子フレームからサンドボックス化されたフレームへのナビゲーションを行いたい場合、window.locationではなくdocument.locationでのみこれを行うことができます。