В чем разница между window.location и document.location в JavaScript? - PullRequest
224 голосов
/ 12 марта 2010

Должны ли они оба ссылаться на один и тот же объект?

Ответы [ 16 ]

202 голосов
/ 12 марта 2010

Канонический способ получить объект текущего местоположения - window.location (см. эту страницу MSDN с 1996 и черновик W3C с 2006 ).

Сравните это с document.location, который первоначально возвращал только текущий URL в виде строки (см. эту страницу в MSDN ). Вероятно, чтобы избежать путаницы, document.location был заменен на document.URL (см. здесь, на MSDN ), который также является частью DOM Level 1 .

Насколько я знаю, все современные браузеры отображают document.location на window.location, но я все еще предпочитаю window.location, поскольку именно это я использовал, так как написал свой первый DHTML.

197 голосов
/ 12 марта 2010

Согласно W3C, они одинаковы. На самом деле, для кросс-браузерной безопасности вы должны использовать window.location вместо document.location.

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

92 голосов
/ 22 октября 2011

window.location доступно для чтения / записи во всех совместимых браузерах.

document.location только для чтения в Internet Explorer (по крайней мере), но чтение / запись в браузерах на основе Gecko (Firefox, SeaMonkey).

44 голосов
/ 22 октября 2011

document.location изначально было доступно только для чтения, хотя браузеры Gecko также позволяют назначать его. Для кросс-браузерной безопасности используйте window.location.

Подробнее:

document.location

window.location

36 голосов
/ 23 августа 2012

Интересно, что если у вас есть фрейм, изображение или форма с именем «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!')
27 голосов
/ 22 октября 2011

Насколько я знаю, оба одинаковы. Для кросс-браузерной безопасности вы можете использовать window.location вместо document.location.

Все современные браузеры отображают document.location на window.location, но я все еще предпочитаю window.location, поскольку именно это я использовал, так как написал свою первую веб-страницу. это более последовательно.

вы также можете увидеть document.location === window.location возвращает true, что объясняет, что оба одинаковы.

13 голосов
/ 12 марта 2010

document.location === window.location возвращает true

также

document.location.constructor === window.location.constructor - это true

Примечание: только что протестировано на Firefox 3.6, Opera 10 и IE6

10 голосов
/ 12 марта 2010

Да, они одинаковы. Это одна из многих исторических причуд в браузере JS API. Попробуйте сделать:

window.location === document.location
8 голосов
/ 12 марта 2010

window.location является более надежной последовательностью, учитывая более старые браузеры.

3 голосов
/ 30 сентября 2016

В настоящее время редко можно увидеть разницу, потому что HTML 5 больше не поддерживает наборы фреймов. Но в то время, когда у нас есть frameset, document.location перенаправляет только фрейм, в котором выполняется код, а window.location перенаправляет всю страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...