В чем разница между окном.местонахождение и документ.расположение в JavaScript?



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

204   16  

16 ответов:

согласно 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 Level 1.

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

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

подробнее:

document.location

window.location

интересно, что если у вас есть рамка, изображение или форма с именем "местоположение", то " документ.location ' предоставляет ссылку на фреймовое окно, изображение или форму, соответственно, вместо объекта Location. Видимо, это из-за документа.формы, документы.изображения, и окно.поиск имени коллекции фреймов получает приоритет над отображением в окно.местоположение.

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

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

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

все современные браузеры map document.location to 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 Это более надежный способ получения тока URL. Ниже приводится разница между window.location и document.url это произошло в одном из сценариев, где я добавлял параметры хэша в URL-адрес и читал его позже.

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

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

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

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

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

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

по крайней мере, в IE, это имеет небольшое отличие от локального файла:

документ.URL-адрес будет возвращать "file://C:\projects\abc\a.html"

но окне.местоположение.Солар, может вернется "file:///C:/projects/abc/a.html"

один назад Слэш, один вперед Слэш.

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

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

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

на самом деле я замечаю разницу в chrome между обоими , например, если вы хотите сделать навигацию к изолированному кадру из дочернего кадра, то вы можете сделать это только с документом.расположение, но не с окном.расположение

несмотря на то, что большинство людей рекомендуют здесь, вот как Google Analyticsдинамический протокол snipped выглядел так долго (до того, как они переехали из ga.js для аналитики.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 предпочитает документ.расположение до window.location когда им нужен протокол в JS, я думаю, у них есть некоторые причины для этого.

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

Comments

    Ничего не найдено.