web-dev-qa-db-ja.com

JavaScriptのwindow.locationとdocument.locationの違いは何ですか?

両方が同じオブジェクトを参照する必要がありますか?

225
Morgan Cheng

W3Cによると、それらは同じです。実際には、クロスブラウザの安全性のために、window.locationではなくdocument.locationを使用する必要があります。

参照: http://www.w3.org/TR/html/browsers.html#dom-location

198
rahul

現在の場所オブジェクトを取得する標準的な方法はwindow.locationです( 1996年のこのMSDNページ および 2006年のW3Cドラフト を参照)。

これをdocument.locationと比較してください。元は現在のURLを文字列としてのみ返していました( MSDNのこのページ を参照)。おそらく混乱を避けるために、document.locationdocument.URLに置き換えられました( こちらMSDN を参照)。これは DOMレベル1 の一部でもあります。

私の知る限り、最新のブラウザはすべてdocument.locationwindow.locationにマッピングしますが、window.locationを好みます。これは、最初のDHTMLを書いて以来使用してきたものです。

203
Christoph

window.location は、すべての準拠ブラウザで読み取り/書き込み可能です。

document.location は、少なくともInternet Explorerでは読み取り専用ですが、Geckoベースのブラウザー(Firefox、SeaMonkey)では読み取り/書き込みが可能です。

92

document.locationはもともと読み取り専用のプロパティでしたが、 Geckoブラウザー を割り当てることもできます。クロスブラウザの安全性のために、代わりにwindow.locationを使用してください。

続きを読む:

document.location

window.location

44
diEcho

興味深いことに、「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!')
36
Phil Hamer

私の知る限り、両方とも同じです。クロスブラウザの安全性のために、window.locationではなくdocument.locationを使用できます。

最新のブラウザはすべてdocument.locationwindow.locationにマッピングしますが、window.locationを好みます。これは、最初のWebページを書いてから使用したものだからです。より一貫しています。

document.location === window.locationtrueを返すことも確認できます。これは、両方が同じであることを明確にします。

27
AlphaMale

document.location === window.locationtrueを返します

また

document.location.constructor === window.location.constructortrueです

注:Firefox 3.6、Opera 10およびIE6でテスト済み

13
YOU

はい、それらは同じです。これは、ブラウザーJS APIの多くの歴史的な癖の1つです。やってみてください:

window.location === document.location
10

window.locationは、古いブラウザを考慮して、2つの信頼性の高い一貫性があります。

8
Dave Ward

Html 5はフレームセットをサポートしなくなったため、最近では違いが見られることはほとんどありません。しかし、フレームセットを作成した時点では、document.locationはコードが実行されているフレームのみをリダイレクトし、window.locationはページ全体をリダイレクトしていました。

3
Marquinho Peli

window.locationは、現在の URL を取得するより信頼性の高い方法です。以下は、URLにハッシュパラメーターを追加して後で読み取るシナリオの1つで前面に出てきたwindow.locationdocument.urlの違いです。

URLにハッシュパラメーターを追加した後。

古いブラウザーでは、document.urlを使用してURLからハッシュパラメーターを取得できませんでしたが、window.locationを使用すると、URLからハッシュパラメーターを取得できました。

したがって、window.locationを使用することを常にお勧めします。

2
azhar_salati

document.location.constructor === window.location.constructortrueです。

document.location===window.locationからわかるように、まったく同じオブジェクトだからです。

そのため、コンストラクターや他のプロパティを比較する必要はありません。

2
Gene Karasev

まあ、彼らは同じですが、....!

window.locationは、一部のInternet Explorerブラウザーで動作していません。

2
divHelper11

少なくともIEでは、ローカルファイルに少し違いがあります。

document.URLは「file:// C:\ projects\abc\a.html」を返します

しかし、window.location.hrefは「file:/// C:/projects/abc/a.html」を返します

1つはバックスラッシュ、もう1つはスラッシュです。

2
Justin

実際、両方のchromeの違いに気づきます。たとえば、子フレームからサンドボックス化されたフレームへのナビゲーションを行いたい場合、window.locationではなくdocument.locationでのみこれを行うことができます。

0
M.Abulsoud