Какая разница между window.location и document.location в JavaScript?

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

Ответы

Ответ 1

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

Смотрите: http://www.w3.org/TR/html/browsers.html#dom-location

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

Подробнее:

document.location

window.location

Ответ 5

Интересно, что если у вас есть кадр, изображение или форма с именем "местоположение", то "document.location" предоставляет ссылку на окно, изображение или форму кадра, соответственно, вместо объекта "Местоположение". По-видимому, это связано с тем, что поиск имени документа document.forms, document.images и window.frames получает приоритет над отображением в window.location.

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

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

Ответ 6

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

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

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

Ответ 7

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

и

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

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

Ответ 8

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

window.location === document.location

Ответ 9

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

Ответ 10

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

Ответ 11

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

Это потому, что он точно такой же, как вы можете видеть из document.location===window.location.

Поэтому нет необходимости сравнивать конструктор или любое другое свойство.

Ответ 12

Я бы сказал, window.location является более надежным способом получения текущего URL. Ниже приведена разница между window.location и document.url, которая появилась впереди в одном из сценариев, в которых я добавлял хэш-параметры в URL-адрес и читал его позже.

После добавления параметров хэша в URL.

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

Поэтому всегда лучше использовать window.location.

Ответ 13

По крайней мере, в IE он имеет небольшую разницу в локальном файле:

document.URL вернется    "Файл://C:\Проекты\а\a.html"

но window.location.href вернется    "Файл:///C:/projects/abc/a.html"

Один обратный косой чертой, один - косой чертой.

Ответ 14

Ну да, они такие же, но....!

window.location не работает в некоторых браузерах Internet Explorer.

Ответ 15

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

Ответ 16

Несмотря на то, что большинство людей рекомендуют здесь, вот как Google Analytics сокращенный динамический протокол выглядел как на века (прежде чем они переместились с ga.js на analytics.js в последнее время):

ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';

Дополнительная информация: https://developers.google.com/analytics/devguides/collection/gajs/

В новой версии они использовали "//", поэтому браузер может автоматически добавлять протокол:

'//www.google-analytics.com/analytics.js'

Итак, если Google предпочитает document.location22 > window.location, когда им нужен протокол в JS, я думаю, у них есть некоторые причины для этого.

OVERALL: Я лично считаю, что document.location и window.location совпадают, но если гигант с наибольшей статистикой об использовании браузеров, таких как Google, используя document.location, Я рекомендую следовать им.