Ответ 1
Согласно W3C, они одинаковы. На самом деле, для обеспечения безопасности в кросс-браузере вы должны использовать window.location
, а не document.location
.
Смотрите: http://www.w3.org/TR/html/browsers.html#dom-location
Должны ли они ссылаться на один и тот же объект?
Согласно W3C, они одинаковы. На самом деле, для обеспечения безопасности в кросс-браузере вы должны использовать window.location
, а не document.location
.
Смотрите: http://www.w3.org/TR/html/browsers.html#dom-location
Канонический способ получить текущий объект местоположения window.location
(см. эту страницу MSDN с 1996 г. и проект W3C от 2006 г.).
Сравните это с document.location
, который изначально только возвращал текущий URL как строку (см. эту страницу в MSDN). Вероятно, чтобы избежать путаницы, document.location
был заменен на document.URL
(см. здесь, на MSDN), который также является частью Уровень DOM 1.
Насколько я знаю, все современные браузеры отображают document.location
до window.location
, но я по-прежнему предпочитаю window.location
как то, что я использовал с тех пор, как написал свой первый DHTML.
window.location читается/записывается во всех совместимых браузерах.
document.location доступен только для чтения в Internet Explorer (по крайней мере), но читается/записывается в браузерах на базе Gecko (Firefox, SeaMonkey).
document.location
изначально было доступно только для чтения, хотя браузеры Gecko позволяют вам назначать его также. Для обеспечения безопасности между браузерами используйте window.location
.
Подробнее:
Интересно, что если у вас есть кадр, изображение или форма с именем "местоположение", то "document.location" предоставляет ссылку на окно, изображение или форму кадра, соответственно, вместо объекта "Местоположение". По-видимому, это связано с тем, что поиск имени документа document.forms, document.images и window.frames получает приоритет над отображением в window.location.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
Насколько я знаю, оба они одинаковы. Для защиты от перекрестного браузера вы можете использовать window.location
, а не document.location
.
Все современные браузеры отображают document.location
до window.location
, но я по-прежнему предпочитаю window.location
как то, что я использовал, так как я написал свою первую веб-страницу. он более согласован.
вы также можете видеть, что document.location === window.location
возвращает true
, что поясняет, что оба они одинаковы.
document.location === window.location
возвращает true
и
document.location.constructor === window.location.constructor
true
Примечание. Только что протестировано, Firefox 3.6, Opera 10 и IE6
Да, они одинаковы. Это один из многих исторических причуд в браузере JS API. Попробуйте сделать:
window.location === document.location
window.location более надежно совместим с двумя, учитывая старые браузеры.
Редко видеть разницу в наши дни, потому что html 5 больше не поддерживает фреймы. Но в то время, когда у нас есть набор фреймов, document.location будет перенаправлять только кадр, в котором выполняется код, а window.location будет перенаправлять всю страницу.
document.location.constructor === window.location.constructor
true
.
Это потому, что он точно такой же, как вы можете видеть из document.location===window.location
.
Поэтому нет необходимости сравнивать конструктор или любое другое свойство.
Я бы сказал, window.location
является более надежным способом получения текущего URL.
Ниже приведена разница между window.location
и document.url
, которая появилась впереди в одном из сценариев, в которых я добавлял хэш-параметры в URL-адрес и читал его позже.
После добавления параметров хэша в URL.
В более раннем браузере я не смог получить хэш-параметры из URL с помощью document.url
, но когда я использовал window.location
, тогда мне удалось получить хэш-параметры из URL.
Поэтому всегда лучше использовать window.location
.
По крайней мере, в IE он имеет небольшую разницу в локальном файле:
document.URL вернется "Файл://C:\Проекты\а\a.html"
но window.location.href вернется "Файл:///C:/projects/abc/a.html"
Один обратный косой чертой, один - косой чертой.
Ну да, они такие же, но....!
window.location
не работает в некоторых браузерах Internet Explorer.
На самом деле я замечаю разницу между хром между ними. Например, если вы хотите сделать переход к изолированному кадру из дочернего фрейма, вы можете сделать это только с помощью document.location, но не с помощью window.location
Несмотря на то, что большинство людей рекомендуют здесь, вот как 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, Я рекомендую следовать им.