Odpowiedzi:
Według W3C są one takie same. W rzeczywistości dla bezpieczeństwa w różnych przeglądarkach powinieneś używać window.locationzamiast 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.locationzostał 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.locationdo window.location, ale ja wciąż wolą window.locationjako ż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?
windowobiektem. 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 locationinterpretowany 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.locationjest 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.locationbył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.locationzamiast 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.locationi document.locationnie 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.locationzamiast document.location.
Wszystkie nowoczesne przeglądarki map document.locationdo 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.locationzwroty 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 truepodczas "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óć, truejeśli xiy odnoszą się do tego samego obiektu. W przeciwnym razie wróć false.
document.locationi window.locationsą 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.locationzwróci true, a document.location===window.locationzwróci false.
document.location === window.locationporównanie. Fakt, że .constructorporó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.locationjest to bardziej niezawodny sposób na uzyskanie bieżącego adresu URL . Poniżej znajduje się różnica między window.locationidocument.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.locationi document.location. Również document.urlnie 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.locationi window.locationsą 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