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


196

JavaScript的有什么区别

window.location.href = window.location.href

window.location.reload()

功能?

Answers:


247

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

如@ W3Max在下面的注释中所指出的,window.location.href=window.location.href如果URL中有锚点(#),则不会重新加载页面- window.location.reload()在这种情况下,您必须使用。

另外,正如下面的@Mic所指出的那样,window.location.reload()它接受一个附加参数,skipCache以便使用window.location.reload(true)浏览器将跳过缓存并从服务器重新加载页面。window.location.reload(false)将执行相反的操作,并在可能的情况下从缓存加载页面。


11
请注意,当您在POST上使用window.location.reload()时,浏览器会询问您是否要重新发送数据以重新加载页面
2010年

3
@Wimmel,有没有办法禁用此消息?
Kris-I 2010年

40
如果URL中有锚点(#),则window.location.href = window.location.href将不会重新加载页面-在这种情况下,您必须使用window.location.reload()。
W3Max 2012年

5
还要注意,location.reload()还将强制重新加载所有静态内容(非常类似于ctrl + f5样式的硬刷新),而将location.href设置回href(或路径名或URL)则不会,这可能很重要(并且不必要)在某些页面上加载时间的差异。
Rob Van Dam

2
@Wimmel Chrome:使用GET Firefox重新加载页面:重新执行上一个请求,这意味着如果它是POST,您将看到一个漂亮的弹出窗口,询问您是否重新发送数据
Juri

51

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

注:default为值window.location.reload()ISfalse


5
@Ismail-默认为false。
特雷弗

2
Google Chrome 32,使用webRTC时,true / false对我不起作用。我有一个带webRTC的iframe,只有使用window.location.href = window.location.href了技巧。

如果您对页面上的表单进行了更改,则使用或时,更改可能会消失(还原为缓存的值),具体取决于浏览器。要完全刷新页面,请使用。location.reload()location.reload(false)location.reload(true)
Suncat2000 '17

32

区别在于

window.location = document.URL;

如果网址中包含井号(#)(后面有或没有东西),则不会重新加载页面,而

window.location.reload();

将重新加载页面。


2
并非所有的浏览器都具有这种问题,以消除麻烦。如果您担心结尾的哈希,请尝试:window.location = document.URL.replace(/#$ /,'');
Walter Stabosz 2012年

1
至少Chrome值得关注。我曾经认为location.href = location.href是理所当然的,但是我只是注意到了确切的行为,于是来到SO进行宣传。只需使用location.reload()
Pioul

1
您也可以使用window.location.pathname而不是编写此类正则表达式。例如:window.location.replace(window.location.pathname);
Arseny 2012年

20

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

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

window.location.href和document.URL的内容之间可能存在差异-至少过去location.href与与重定向有关的非标准和弃用的document.location之间存在差异,但是确实是上个千年。

出于文档目的,我将使用window.location.reload(),因为这是您想要执行的操作。


请查看stackoverflow.com/a/5091619/429972,因为这说明了差异。
2012年

14

如前所述,在网址中包含井号(#)时修改href不会重新加载页面。因此,我使用它来重新加载它,而不是使用正则表达式:

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

6

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

window.location.reload();

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

 window.location = document.URL;

刷新页面更快,几乎没有察觉。

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

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


window.location = document.URL像window.location.reload()一样重新加载页面。是否有最新的技术可以刷新而不滚动到顶部,或者您所说的没有察觉?
bigmugcup

6

Firefox(12.0)中的不同之处在于,在通过POST渲染的页面上,reload()将弹出警告并进行重新发布,而URL分配将进行GET。

谷歌浏览器会同时执行G​​ET操作。


1
Chrome 38现在似乎对.reload()使用了POST。
2014年

3

使用JSF,我现在遇到会话过期后刷新的问题:页面重新加载后出现PrimeFaces ViewExpiredException,并进行了一些调查,发现FireFox有一个区别:

调用的window.location.reload()工作方式类似于单击FF上的刷新图标,它会添加一行

Cache-Control max-age=0

设置的window.location.href工作方式类似于在URL行中按ENTER,但不会发送该行。

尽管两者均以GET的形式发送,但第一个(重新加载)正在还原先前的数据,并且应用程序处于不一致状态。


1

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


1

根据我大约3年的经验,我找不到任何区别...

编辑:是的,正如这里的一个人所说,仅将布尔参数传递给window.location.reload()是区别。如果传递true,那么浏览器将加载一个新页面,但是如果传递false,则将加载缓存版本...


0

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

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

只需使用带有空“ href”属性值的<a>标记,如下所示:

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

(在某些情况下,您必须在点击目标时使用“返回真”来触发重新加载)

有关更多信息,请查看以下问题: 空的href有效吗?


-3

window.location.href,这可以挽救我从Android 5.1在webview中的生命。在此版本中,该页面不会从Android重新加载location.reload()。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.