Dav*_*one 237

如果我没记错的话,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)将执行相反的操作,并尽可能从缓存加载页面.

  • 如果URL中有锚(#),window.location.href = window.location.href将不会重新加载页面 - 在这种情况下,您必须使用window.location.reload(). (39认同)
  • 请注意,当您在POST上使用window.location.reload()时,浏览器会询问您是否要重新发送数据以重新加载页面 (11认同)
  • 另请注意,location.reload()也会强制重新加载所有静态内容(很像ctrl + f5样式硬刷新),而将location.href设置回href(或路径名或URL)则不会,这可能是重要的(和某些页面上的加载时间差异. (5认同)
  • @Wimmel,有没有办法禁用此消息? (3认同)
  • @Wimmel Chrome:使用GET Firefox重新加载页面:重新执行上一个请求,这意味着如果它是POST,您将获得一个很好的弹出窗口,询问您是否重新发送数据 (2认同)

Mic*_*Mic 50

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

注:defaultwindow.location.reload()false

  • 什么是默认值? (5认同)
  • @Ismail - 默认为false. (5认同)
  • Google Chrome 32,使用webRTC时,true / false对我不起作用。我有一个带webRTC的iframe,只能使用`window.location.href = window.location.href`来解决问题。 (2认同)

Fab*_*ger 30

不同之处在于

window.location = document.URL;
Run Code Online (Sandbox Code Playgroud)

如果URL中有一个哈希(#)(有或没有东西),则不会重新加载页面,而

window.location.reload();
Run Code Online (Sandbox Code Playgroud)

将重新加载页面.

  • 并非所有浏览器都有结束这些问题的问题.如果结束哈希是你的一个问题,请尝试:window.location = document.URL.replace(/#$ /,''); (2认同)

mpl*_*jan 18

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

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

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

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


min*_*ior 14

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

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}
Run Code Online (Sandbox Code Playgroud)


inv*_*ear 6

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

window.location.reload();
Run Code Online (Sandbox Code Playgroud)

导致刷新,整个屏幕空白一秒钟,在那里

 window.location = document.URL;
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 6

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

谷歌浏览器为这两者做了GET.