window.location.href = window.location.href和window.location.reload()之间的区别

时间:2010-03-08 22:00:33

标签: javascript

JavaScript的

有什么区别
window.location.href = window.location.href

window.location.reload()

功能

12 个答案:

答案 0 :(得分:231)

如果我没记错的话,window.location.reload()会使用POST数据重新加载当前页面,而window.location.href=window.location.href则不包含POST数据。

正如@ W3Max在下面的评论中指出的那样,如果网址中有锚(#),则window.location.href=window.location.href将不会重新加载网页 - 在这种情况下,您必须使用window.location.reload()

另外,如下面@Mic所述,window.location.reload()需要额外的参数skipCache,因此使用window.location.reload(true)时,浏览器将跳过缓存并从服务器重新加载页面。 window.location.reload(false)将执行相反的操作,并在可能的情况下从缓存加载页面。

答案 1 :(得分:51)

如果您说window.location.reload(true),浏览器将跳过缓存并从服务器重新加载页面。 window.location.reload(false)会做相反的事情。

注意:default的{​​{1}}值为window.location.reload()

答案 2 :(得分:29)

区别在于

window.location = document.URL;
如果URL中有哈希(#)(有或没有东西),

将不会重新加载页面,而

window.location.reload();

将重新加载页面。

答案 3 :(得分:18)

如果在重载中添加布尔值true window.location.reload(true)它将从服务器加载。

目前尚不清楚这个布尔值是如何支持的,W3Org提到NS 用于支持

window.location.href和document.URL的内容可能有区别 - 至少有一个区别是location.href与非标准和已弃用的document.location之间的区别与重定向有关,但那真的是上一个千年。

出于文档目的,我会使用window.location.reload(),因为这是你想要做的。

答案 4 :(得分:14)

如上所述,当url中存在哈希(#)时修改href将不会重新加载页面。因此,我使用它来重新加载它而不是正则表达式:

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}

答案 5 :(得分:6)

遇到这个问题,研究IE中的一些异常行为,特别是IE9,没有检查旧版本。似乎

window.location.reload();

导致刷新整个屏幕空白一秒,其中

 window.location = document.URL;

几乎不知不觉地更快地刷新页面。

进行更多的研究,以及对fiddler的一些实验,似乎window.location.reload()将绕过缓存并从服务器重新加载,无论你是否传递布尔值,这包括获取所有资产(图像,脚本,样式表等)再次。因此,如果您只是希望页面刷新HTML,window.location = document.URL将返回更快,流量更少。

浏览器之间的行为差​​异是,当IE9使用重新加载方法时,它会清除可见页面并且似乎从头开始重建它,其中FF和chrome等待它们获取新资产并重建它们(如果它们不同)。 p>

答案 6 :(得分:6)

Firefox(12.0)的不同之处在于,在从POST呈现的页面上,reload()会弹出警告并重新发布,而URL分配将执行GET。

谷歌浏览器为两者做了GET。

答案 7 :(得分:3)

使用JSF,我现在遇到会话过期后刷新的问题:PrimeFaces ViewExpiredException after page reload并且通过一些调查我发现FireFox有一个区别:

调用window.location.reload()就像点击FF上的刷新图标一样,它会添加一行

Cache-Control max-age=0

虽然设置window.location.href就像按下URL行中的ENTER一样,但它不会发送该行。

虽然两者都是作为GET发送的,但第一个(重新加载)是恢复以前的数据,并且应用程序处于不一致状态。

答案 8 :(得分:1)

不,不应该。但是,某些浏览器可能存在差异,因此在某些情况下(或者两者都不)可能不起作用。

答案 9 :(得分:1)

根据我3年的经验,我找不到任何差异......

编辑:是的,正如其中一位人士所说的那样,只有将布尔参数传递给window.location.reload()才有区别。 如果您传递 true ,则浏览器会加载一个新页面, 但如果 false ,则加载缓存版本......

答案 10 :(得分:0)

在我们的情况下,我们只想在Webview中重新加载页面,由于某些原因,我们找不到原因! 我们尝试了几乎所有已经存在于网络上的解决方案,但是没有使用location.reload()或window.location.reload()等替代解决方案进行重新加载, location.reload(true),...!

这是我们的简单解决方案:

只需使用标记,并将其“ href”属性归为空白,即可:

< a href="" ...>Click Me</a>

(在某些情况下,您必须在点击目标时使用“ return true”以触发重新加载)

有关更多信息,请查看此问题: Is an empty href valid?

答案 11 :(得分:-3)

window.location.href,这从Android 5.1中保存了我在webview中的生活。该页面不会在Android版本的此版本中使用location.reload()重新加载。