it-swarm.com.de

Was ist der Unterschied zwischen window.location und document.location in JavaScript?

Sollen beide auf dasselbe Objekt verweisen?

214
Morgan Cheng

Laut W3C sind sie gleich. In der Realität sollten Sie zur Browserübergreifenden Sicherheit window.location anstelle von document.location verwenden.

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

192
rahul

Der kanonische Weg, das aktuelle Standortobjekt abzurufen, ist window.location (siehe diese MSDN-Seite von 1996 und den W3C-Entwurf von 2006 ).

Vergleichen Sie dies mit document.location, der ursprünglich nur die aktuelle URL als Zeichenfolge zurückgegeben hat (siehe diese Seite in MSDN ). Um Verwechslungen zu vermeiden, wurde document.location durch document.URL (siehe hier auf MSDN ) ersetzt, das auch Teil von DOM Level 1 ist.

Soweit ich weiß, ordnen alle modernen Browser document.location zu window.location zu, aber ich bevorzuge window.location, da ich dies seit dem Schreiben meiner ersten DHTML-Datei verwendet habe.

199
Christoph

window.location ist in allen kompatiblen Browsern lesbar.

document.location ist in Internet Explorer schreibgeschützt (zumindest), aber in Gecko-basierten Browsern (Firefox, SeaMonkey) lesen/schreiben.

91

document.location war ursprünglich eine schreibgeschützte Eigenschaft, obwohl Gecko-Browser Ihnen auch die Zuweisung ermöglichen. Verwenden Sie zur Browserübergreifenden Sicherheit stattdessen window.location.

Weiterlesen: 

document.location

window.location

43
diEcho

Wenn Sie über einen Rahmen, ein Bild oder ein Formular mit dem Namen 'location' verfügen, stellt 'document.location' statt des Objekts 'Location' einen Verweis auf das Rahmenfenster, das Bild oder das Formular bereit. Offensichtlich ist dies darauf zurückzuführen, dass die Lookup-Sammlung document.forms, document.images und window.frames-Collection Vorrang vor der Zuordnung zu window.location erhält.

<img name='location' src='location.png'>

if (document.location.tagName == 'IMG') alert('Hello!')
34
Phil Hamer

Soweit ich weiß, sind beide gleich. Zur Browserübergreifenden Sicherheit können Sie window.location anstelle von document.location verwenden.

Alle modernen Browser ordnen document.location dem window.location zu, aber ich bevorzuge window.location, da ich dies seit dem Schreiben meiner ersten Webseite verwendet habe. es ist konsequenter.

sie können auch sehen, dass document.location === window.locationtrue zurückgibt, wodurch klargestellt wird, dass beide gleich sind.

27
AlphaMale

document.location === window.location gibt true zurück

ebenfalls

document.location.constructor === window.location.constructor ist true

Hinweis: Getestet auf Firefox 3.6, Opera 10 und IE6

13
YOU

Ja, sie sind gleich. Dies ist eine der vielen historischen Macken in der Browser-JS-API. Versuchen Sie es zu tun:

window.location === document.location
10

window.location ist die zuverlässigere der beiden, wenn man ältere Browser berücksichtigt.

8
Dave Ward

Heutzutage ist der Unterschied kaum zu erkennen, da HTML 5 keine Framesets mehr unterstützt. Zu dem Zeitpunkt, zu dem wir frameset haben, würde document.location nur den Frame umleiten, in dem Code ausgeführt wird, und window.location die gesamte Seite umleiten.

2
Marquinho Peli

Ich würde sagen, window.location ist der zuverlässigere Weg, um die aktuelle URL zu erhalten. Der folgende Unterschied ist der Unterschied zwischen window.location und document.url, die in einem der Szenarien vorkamen, in denen ich Hash-Parameter in der URL anhängte und später las.

Nach dem Hinzufügen von Hash-Parametern in der URL.

In einem älteren Browser konnte ich die Hash-Parameter nicht mithilfe von document.url von der URL abrufen. Wenn ich jedoch window.location verwendete, konnte ich die Hash-Parameter von der URL abrufen.

Daher ist es immer besser, window.location zu verwenden.

2
azhar_salati

document.location.constructor === window.location.constructor ist true.

Es ist weil es genau das gleiche Objekt ist, wie Sie es aus document.location===window.location sehen können.

Es ist also nicht notwendig, den Konstruktor oder eine andere Eigenschaft zu vergleichen.

2
Gene Karasev

Na ja, sie sind gleich, aber ....!

window.location funktioniert nicht in einigen Internet Explorer-Browsern.

2
divHelper11

Zumindest im IE hat es einen kleinen Unterschied zu lokalen Dateien:

document.URL wird zurückgegeben "Datei: // C:\projects\abc\a.html"

window.location.href gibt jedoch __ zurück. "file: /// C: /projects/abc/a.html"

Einer ist Backslash, einer ist Slash.

2
Justin

Eigentlich bemerke ich einen Unterschied zwischen beiden. Wenn Sie beispielsweise von einem untergeordneten Frame aus zu einem Sandkastenrahmen navigieren möchten, können Sie dies nur mit document.location und nicht mit window.location tun

0
M.Abulsoud