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版本将被加载…