Czy oba powinny odwoływać się do tego samego obiektu?
javascript
window.location
Morgan Cheng
źródło
źródło
Odpowiedzi:
Według W3C są one takie same. W rzeczywistości dla bezpieczeństwa w różnych przeglądarkach powinieneś używać
window.location
zamiastdocument.location
.Zobacz: http://www.w3.org/TR/html/browsers.html#dom-location
źródło
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ąpionydocument.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
dowindow.location
, ale ja wciąż woląwindow.location
jako że właśnie użyłem ponieważ napisałem mój pierwszy DHTML.źródło
window.location
, czy nie jest równie uzasadnione samo użycielocation
?window
obiektem. Zatem dowolna zmienna lub funkcja zdefiniowana na najwyższym poziomie skryptu jest właściwością obiektuwindow
, do którego się odwołuje , którym jest obiekt globalny. Obiekt globalny jest implikowany, gdy jest nieobecny jakwindow.
- w ten sposóblocation
interpretowany jest jakowindow.location
. Zastrzeżenia - feif(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).
źródło
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żyjwindow.location
zamiast tego.Czytaj więcej:
document.location
window.location
źródło
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.
źródło
window.location
idocument.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
zamiastdocument.location
.Wszystkie nowoczesne przeglądarki map
document.location
dowindow.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
zwrotytrue
, co wyjaśnia, że oba są takie same.źródło
document.location === window.location
zwrotytrue
również
document.location.constructor === window.location.constructor
jesttrue
Uwaga: właśnie przetestowane na Firefox 3.6, Opera 10 i IE6
źródło
===
i==
są równoważne."abc" == new String("abc")
zwracatrue
podczas"abc" === new String("abc")
powrotufalse
.==
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
iwindow.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ównymwindow.location.toString()
, wówczasdocument.location==window.location
zwróci true, adocument.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ć:
źródło
Window.location jest bardziej niezawodnie spójny z tymi dwoma, biorąc pod uwagę starsze przeglądarki.
źródło
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ę.
źródło
Powiedziałbym, że
window.location
jest to bardziej niezawodny sposób na uzyskanie bieżącego adresu URL . Poniżej znajduje się różnica międzywindow.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
.źródło
document.URL
- chodziło owindow.location
idocument.location
. Równieżdocument.url
nie istnieje = powinna być pisana wielkimi literami.document.location.constructor === window.location.constructor
jesttrue
.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.
źródło
Przynajmniej w IE ma małą różnicę w pliku lokalnym:
document.URL zwróci „plik: // C: \ projects \ abc \ a.html”
ale window.location.href zwróci „plik: /// C: /projects/abc/a.html”
Jeden to cięcie wstecz, jeden to cięcie do przodu.
źródło
Cóż, są takie same, ale ....!
window.location
nie działa w niektórych przeglądarkach Internet Explorer.źródło
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):
Więcej informacji: https://developers.google.com/analytics/devguides/collection/gajs/
W nowej wersji użyli „//”, aby przeglądarka mogła automatycznie dodać protokół:
Więc jeśli Google preferuje document.location do
window.location
kiedy potrzebują protokołu w JS, myślę, że oni mają jakieś powody.OGÓŁEM : Osobiście w to wierzę
document.location
iwindow.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ć.źródło
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
źródło