Odpowiedzi:
Według W3C są one takie same. W rzeczywistości dla bezpieczeństwa w różnych przeglądarkach powinieneś używać window.location
zamiast document.location
.
Zobacz: http://www.w3.org/TR/html/browsers.html#dom-location
window.location
) bez podania jej uzasadnienia. Jeśli nie podasz uzasadnienia, dlaczego ktoś miałby skorzystać z Twojej porady? Odpowiedź Christopha jest o wiele bardziej przydatna w tym względzie.
Kanonicznym sposobem uzyskania bieżącego obiektu lokalizacji jest window.location
(patrz strona MSDN z 1996 r. I szkic W3C z 2006 r .).
Porównaj to z document.location
, które pierwotnie zwróciło tylko bieżący adres URL jako ciąg (zobacz tę stronę w MSDN ). Prawdopodobnie, aby uniknąć nieporozumień, document.location
został zastąpiony document.URL
(patrz tutaj na MSDN ), który jest również częścią DOM Level 1 .
O ile mi wiadomo, wszystkie nowoczesne przeglądarki map document.location
do window.location
, ale ja wciąż wolą window.location
jako że właśnie użyłem ponieważ napisałem mój pierwszy DHTML.
window.location
, czy nie jest równie uzasadnione samo użycie location
?
window
obiektem. Zatem dowolna zmienna lub funkcja zdefiniowana na najwyższym poziomie skryptu jest właściwością obiektu window
, do którego się odwołuje , którym jest obiekt globalny. Obiekt globalny jest implikowany, gdy jest nieobecny jak window.
- w ten sposób location
interpretowany jest jako window.location
. Zastrzeżenia - fe if(an_undefined_variable)
wyrzuci błąd, jeśli zmienna nie została zdefiniowana - if(window.an_undefined_variable)
nie zrobi tego.
Window.location jest do odczytu / zapisu we wszystkich zgodnych przeglądarkach.
Document.location jest tylko do odczytu w Internet Explorerze (przynajmniej), ale do odczytu / zapisu w przeglądarkach opartych na Gecko (Firefox, SeaMonkey).
document.location
jest tylko do odczytu w IE. Mogę z powodzeniem przypisać do niego w IE 10, 9, 8 i 6 (przy użyciu maszyn wirtualnych z modern.ie ).
console.log(location);
? !!
document.location
była pierwotnie właściwością tylko do odczytu, chociaż przeglądarki Gecko pozwalają również na przypisanie do niej. Dla bezpieczeństwa w różnych przeglądarkach użyj window.location
zamiast tego.
Czytaj więcej:
Co ciekawe, jeśli masz ramkę, obraz lub formularz o nazwie „lokalizacja”, wówczas „document.location” zapewnia odniesienie odpowiednio do okna ramki, obrazu lub formularza zamiast obiektu Location. Najwyraźniej dzieje się tak, ponieważ wyszukiwanie nazw kolekcji document.forms, document.images i window.frames ma pierwszeństwo przed odwzorowaniem na window.location.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.location
i document.location
nie może być zasłonięta w Chrome lub Firefox.
O ile mi wiadomo, oba są takie same. Dla bezpieczeństwa w różnych przeglądarkach możesz użyć window.location
zamiast document.location
.
Wszystkie nowoczesne przeglądarki map document.location
do window.location
, ale nadal preferująwindow.location
jako że właśnie użyłem odkąd napisałem swoją pierwszą stronę internetową. jest bardziej spójny.
możesz także zobaczyć document.location === window.location
zwroty true
, co wyjaśnia, że oba są takie same.
document.location === window.location
zwroty true
również
document.location.constructor === window.location.constructor
jest true
Uwaga: właśnie przetestowane na Firefox 3.6, Opera 10 i IE6
===
i ==
są równoważne.
"abc" == new String("abc")
zwraca true
podczas "abc" === new String("abc")
powrotu false
.
==
i ===
są one równoważne. Zobacz specyfikacje w sekcjach 11.9.3 i 11.9.6. W przypadku wartości niepustych, nieokreślonych, niepoliczalnych, nieobsługujących wartości bool i ciągów o tym samym typie ==
zachowanie jest regulowane w 11.9.3 część 1f, a ===
zachowanie w 11.9.6 część 7, które identycznie brzmią Zwróć, true
jeśli xiy odnoszą się do tego samego obiektu. W przeciwnym razie wróć false
.
document.location
i window.location
są skierowane do obiektów. Brakuje ci całego punktu potrójnych równości; użycie 2 równa się nie dowodzi , że są one tym samym obj. Powinniśmy użyć 3 równych, a nie 2 równych, ponieważ 2 równe dadzą nam fałszywie dodatni. W przeglądarce, w której document.location jest ciągiem URL równym window.location.toString()
, wówczas document.location==window.location
zwróci true, a document.location===window.location
zwróci false.
document.location === window.location
porównanie. Fakt, że .constructor
porównanie jest również wrzucone, oznacza, jak sądzę, że ta odpowiedź jest nadal trafna, ale użycie ===
uprościłoby rozumowanie.
Tak, są takie same. Jest to jedno z wielu historycznych dziwactw w interfejsie API JS przeglądarki. Spróbuj zrobić:
window.location === document.location
Obecnie rzadko widać różnicę, ponieważ HTML 5 nie obsługuje już zestawów ramek. Ale w momencie, gdy mamy zestaw ramek, document.location przekierowuje tylko ramkę, w której wykonywany jest kod, a window.location przekierowuje całą stronę.
Powiedziałbym, że window.location
jest to bardziej niezawodny sposób na uzyskanie bieżącego adresu URL . Poniżej znajduje się różnica między window.location
idocument.url
który przyszedł z przodu w jednym ze scenariuszy, gdzie byłem załączonych parametrów mieszania w adresie URL i czytanie go później.
Po dodaniu parametrów skrótu w adresie URL.
W starszej przeglądarce nie byłem w stanie uzyskać parametrów skrótu z adresu URL za pomocą document.url
, ale kiedy użyłemwindow.location
byłem w stanie uzyskać parametry skrótu z adresu URL.
Dlatego zawsze lepiej jest używać window.location
.
document.URL
- chodziło o window.location
i document.location
. Również document.url
nie istnieje = powinna być pisana wielkimi literami.
document.location.constructor === window.location.constructor
jest true
.
Jest tak, ponieważ jest to dokładnie ten sam obiekt, z którego widać document.location===window.location
.
Nie ma więc potrzeby porównywania konstruktora ani żadnej innej właściwości.
Cóż, są takie same, ale ....!
window.location
nie działa w niektórych przeglądarkach Internet Explorer.
Pomimo tego, że większość ludzi tutaj poleca, tak wyglądał dynamiczny wycinek protokołu Google Analytics od wieków (zanim ostatnio przeszli z ga.js na analytics.js):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Więcej informacji: https://developers.google.com/analytics/devguides/collection/gajs/
W nowej wersji użyli „//”, aby przeglądarka mogła automatycznie dodać protokół:
'//www.google-analytics.com/analytics.js'
Więc jeśli Google preferuje document.location dowindow.location
kiedy potrzebują protokołu w JS, myślę, że oni mają jakieś powody.
OGÓŁEM : Osobiście w to wierzę document.location
i window.location
są takie same, ale jeśli gigant z największymi statystykami na temat korzystania z przeglądarek takich jak Google za pomocą document.location , polecam je śledzić.
Właściwie zauważam różnicę w chromie między nimi, na przykład jeśli chcesz nawigować do ramki w piaskownicy z ramki podrzędnej, możesz to zrobić tylko za pomocą document.location, ale nie za pomocą window.location