他们俩都应该引用同一个对象吗?
答案 0 :(得分:201)
获取当前位置对象的规范方法是window.location
(请参阅this MSDN page from 1996和the W3C draft from 2006)。
将此与document.location
进行比较,document.location
最初仅将当前网址作为字符串返回(请参阅this page on MSDN)。可能为了避免混淆,document.URL
已替换为document.location
(请参阅here on MSDN),这也是DOM Level 1的一部分。
据我所知,所有现代浏览器都将window.location
映射到window.location
,但我仍然更喜欢{{1}},因为这是我在编写第一个DHTML后使用的内容。
答案 1 :(得分:196)
根据W3C,他们是一样的。实际上,对于跨浏览器的安全性,您应该使用window.location
而不是document.location
。
答案 2 :(得分:91)
window.location在所有兼容的浏览器上都是可读/写的。
document.location在Internet Explorer中是只读的(至少),但在基于Gecko的浏览器中读取/写入(Firefox,SeaMonkey)。
答案 3 :(得分:43)
document.location
最初是一个只读属性,但Gecko browsers也允许您分配给它。对于跨浏览器安全性,请改用window.location
。
了解详情:
答案 4 :(得分:35)
有趣的是,如果你有一个名为'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!')
答案 5 :(得分:27)
据我所知,两者都是一样的。对于跨浏览器安全,您可以使用window.location
而不是document.location
。
所有现代浏览器都将document.location
映射到window.location
,但我仍然更喜欢window.location
,因为这是我在编写第一个网页后使用的内容。它更加一致。
您还可以看到document.location === window.location
返回true
,这表明两者都相同。
答案 6 :(得分:13)
document.location === window.location
返回true
也
document.location.constructor === window.location.constructor
是true
注意:刚刚测试过Firefox 3.6,Opera 10和IE6
答案 7 :(得分:10)
是的,它们是一样的。这是浏览器JS API中众多历史怪癖中的一个。尝试做:
window.location === document.location
答案 8 :(得分:8)
window.location是两者中更可靠的一致性。
答案 9 :(得分:3)
现在很难看到差异,因为html 5不再支持框架集。但是当我们有框架集时,document.location将只重定向正在执行代码的框架,window.location将重定向整个页面。
答案 10 :(得分:2)
document.location.constructor === window.location.constructor
是true
。
这是因为它与document.location===window.location
中的对象完全相同。
因此无需比较构造函数或任何其他属性。
答案 11 :(得分:2)
我认为window.location
是获取当前URL的更可靠方式。
以下是我在URL中附加哈希参数并稍后阅读的其中一个场景中出现的window.location
和document.url
之间的差异。
在网址中添加哈希参数后。
在较旧的浏览器中,我无法使用document.url
从URL获取哈希参数,但是当我使用window.location
时,我能够从URL获取哈希参数。
因此,最好使用window.location
。
答案 12 :(得分:2)
至少在IE中,它与本地文件有一点区别:
document.URL将返回 “文件:// C:\项目\ ABC \ a.html”
但是window.location.href将返回 “文件:/// C:/projects/abc/a.html”
一个是反斜杠,一个是正斜杠。
答案 13 :(得分:2)
嗯,他们是一样的,但......!
window.location
无法在某些Internet Explorer浏览器上运行。
答案 14 :(得分:0)
实际上我注意到两者之间的chrome有区别,例如,如果你想从子框架导航到沙盒框架,那么你可以使用document.location而不是window.location
答案 15 :(得分:-1)
尽管大多数人都在这里推荐,但 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 在JS需要协议时更喜欢 document.location 到window.location
,我猜他们有一些理由。
总体上:我个人认为document.location
和window.location
是相同的,但如果有关于 Google 等浏览器使用率最高的巨人使用 document.location ,我建议您关注它们。