JavaScript中的window.location和document.location有什么区别?

时间:2010-03-12 06:33:53

标签: javascript window.location

他们俩都应该引用同一个对象吗?

16 个答案:

答案 0 :(得分:201)

获取当前位置对象的规范方法是window.location(请参阅this MSDN page from 1996the 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

请参阅:http://www.w3.org/TR/html/browsers.html#dom-location

答案 2 :(得分:91)

window.location在所有兼容的浏览器上都是可读/写的。

document.location在Internet Explorer中是只读的(至少),但在基于Gecko的浏览器中读取/写入(Firefox,SeaMonkey)。

答案 3 :(得分:43)

document.location最初是一个只读属性,但Gecko browsers也允许您分配给它。对于跨浏览器安全性,请改用window.location

了解详情:

document.location

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.constructortrue

注意:刚刚测试过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.constructortrue

这是因为它与document.location===window.location中的对象完全相同。

因此无需比较构造函数或任何其他属性。

答案 11 :(得分:2)

我认为window.location是获取当前URL的更可靠方式。 以下是我在URL中附加哈希参数并稍后阅读的其中一个场景中出现的window.locationdocument.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.locationwindow.location是相同的,但如果有关于 Google 等浏览器使用率最高的巨人使用 document.location ,我建议您关注它们。