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

JavaScript的区别是什么?

window.location.href = window.location.href 

 window.location.reload() 

function?

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

正如@ W3Max在下面的注释中指出的那样,如果URL中存在锚点(#), window.location.href=window.location.href将不会重新加载页面 – 在这种情况下,您必须使用window.location.reload()

另外,正如下面的@Mic所指出的那样, window.location.reload()需要一个额外的参数skipCache以便使用window.location.reload(true) ,浏览器将跳过caching并从服务器重新加载页面。 window.location.reload(false)会做相反的事情,如果可能的话从caching中加载页面。

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

不同之处在于

 window.location = document.URL; 

如果url中存在散列(#)(不pipe有没有东西),将不会重新加载页面

 window.location.reload(); 

将重新加载页面。

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

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

window.location.href和document.URL的内容之间可能是有区别的 – 那里至less是location.href和非redirect的不合标准和不赞成的document.location之间的区别,但是真的是上个千年

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

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

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

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

 window.location.reload(); 

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

  window.location = document.URL; 

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

做了一些更多的研究和一些小提琴手的实验,似乎window.location.reload()将绕过caching并从服务器重新加载,无论你是否传递布尔值,这包括获取所有资产(图像,脚本,样式表等)。 所以,如果你只是想页面刷新HTML, window.location = document.URL将返回更快,更less的stream量。

浏览器之间的行为差​​异是,当IE9使用重载方法时,它将清除可见页面,并从头开始重build,FF和chrome等待它们获得新资产并重build它们(如果它们不同)。

Firefox(12.0)的不同之处在于,在POST页面中,reload()将popup警告并重新发布,而URL分配将执行GET。

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

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

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

Cache-Control max-age=0

而设置window.location.href工作方式就像在URL行中按ENTER,它不会发送该行。

尽pipe两者都以GET方式发送,但第一个(重新加载)会恢复以前的数据,并且应用程序处于不一致的状态。

不,不应该有。 但是,在某些浏览器中可能存在差异,因此在某些情况下(或者两者都不)可能无法正常工作。

从我大约3年的经验,我找不到任何区别…

编辑:是的,正如他们在这里所说的一样,只传递一个布尔参数到window.location.reload()是不同的。 如果你传递true ,那么浏览器加载一个新的页面,但如果是false ,那么caching版本将被加载…