【发布时间】:2011-01-25 04:41:45
【问题描述】:
JavaScript 的区别是什么
window.location.href = window.location.href
和
window.location.reload()
功能?
【问题讨论】:
标签: javascript
JavaScript 的区别是什么
window.location.href = window.location.href
和
window.location.reload()
功能?
【问题讨论】:
标签: javascript
如果您说window.location.reload(true),浏览器将跳过缓存并从服务器重新加载页面。 window.location.reload(false) 会做相反的事情。
注意:window.location.reload() 的 default 值为 false
【讨论】:
window.location.href = window.location.href 就可以了。
location.reload() 或location.reload(false) 时,更改可能会消失(恢复为缓存值),具体取决于浏览器.要完全刷新页面,请使用location.reload(true)。
forceGet 的参数location.reload() 是only available in Firefox!
如果我没记错的话,window.location.reload() 用 POST 数据重新加载当前页面,而window.location.href=window.location.href 不包括 POST 数据。
正如@W3Max 在下面的 cmets 中所指出的,如果 URL 中有锚点 (#),window.location.href=window.location.href 将不会重新加载页面 - 在这种情况下您必须使用 window.location.reload()。
此外,正如下面@Mic 所指出的,window.location.reload() 采用附加参数skipCache,因此使用window.location.reload(true) 时,浏览器将跳过缓存并从服务器重新加载页面。 window.location.reload(false) 会做相反的事情,并尽可能从缓存中加载页面。
【讨论】:
不,不应该。但是,某些浏览器可能存在差异,因此在某些情况下,任何一个(或两个都不)都可能不起作用。
【讨论】:
如果您将布尔值 true 添加到重新加载
window.location.reload(true) 将从服务器加载。
不清楚这个布尔值的支持程度,W3Org 提到 NS 曾经支持它
window.location.href 和 document.URL 的内容之间可能存在差异 - location.href 和非标准且已弃用的 document.location 至少曾经存在差异,这与重定向有关,但那确实是上个千年。
出于文档目的,我会使用window.location.reload(),因为这是您想要做的。
【讨论】:
根据我大约 3 年的经验,我找不到任何区别......
edit:是的,正如其中一位所说,仅将布尔参数传递给 window.location.reload() 是不同的。 如果你传递 true,那么浏览器会加载一个新页面, 但如果false,则缓存版本被加载...
【讨论】:
区别在于
window.location = document.URL;
如果 URL 中有一个井号 (#)(后面有或没有什么),则不会重新加载页面,而
window.location.reload();
将重新加载页面。
【讨论】:
location.href = location.href 是理所当然的,但我只是注意到了这种确切的行为并来到SO 传播这个词。只需改用location.reload()。
window.location.replace(window.location.pathname);
在研究 IE 中的一些异常行为时遇到了这个问题,特别是 IE9,没有检查旧版本。好像
window.location.reload();
导致刷新将整个屏幕空白一秒钟,其中
window.location = document.URL;
刷新页面的速度更快,几乎在不知不觉中。
做更多的研究,并用 fiddler 进行一些实验,似乎window.location.reload() 将绕过缓存并从服务器重新加载,无论您是否传递布尔值,这包括获取所有资产(图像,脚本,样式表等)再次。因此,如果您只想让页面刷新 HTML,window.location = document.URL 将返回更快且流量更少。
浏览器之间的行为差异是,当 IE9 使用 reload 方法时,它会清除可见页面并似乎从头开始重建它,其中 FF 和 chrome 等到它们获得新资产并在它们不同时重建它们。
【讨论】:
Firefox (12.0) 的不同之处在于,在从 POST 呈现的页面上,reload() 将弹出警告并重新发布,而 URL 分配将执行 GET。
谷歌浏览器对两者都进行了 GET。
【讨论】:
使用 JSF,我现在在会话过期后遇到刷新问题:PrimeFaces ViewExpiredException after page reload 并且经过一些调查,我发现了 FireFox 的一个不同之处:
调用window.location.reload()就像点击FF上的刷新图标,它添加了一行
Cache-Control max-age=0
虽然设置window.location.href 就像在 URL 行中按 ENTER 一样,但它不会发送该行。
虽然两者都是作为 GET 发送的,但第一个(重新加载)是恢复以前的数据并且应用程序处于不一致状态。
【讨论】:
如前所述,当 url 中有哈希 (#) 时修改 href 不会重新加载页面。因此,我使用它来重新加载它而不是正则表达式:
if (!window.location.hash) {
window.location.href = window.location.href;
} else {
window.location.reload();
}
【讨论】:
window.location.href,这就像在 Android 5.1 的 webview 中救了我的命。在这个 Android 版本中,页面不会使用 location.reload() 重新加载。
【讨论】:
在我们的例子中,我们只想在 webview 中重新加载页面,但由于某些原因,我们无法找出原因! 我们尝试了几乎所有网络上的解决方案,但使用 location.reload() 或 window.location.reload() 等替代解决方案无法重新加载, location.reload(true), ...!
这是我们的简单解决方案:
只需使用带有空“href”属性值的 标记,如下所示:
< a href="" ...>Click Me</a>
(在某些情况下,您必须在点击目标时使用“return true”来触发重新加载)
有关更多信息,请查看此问题: Is an empty href valid?
【讨论】: