2017-08-11 455 views
3

我正在尝试构建一个“版本更新”组件,当网站更新并提示用户重新加载时,它将显示一条横幅。不幸的是,当一些用户重新加载他们的页面时被缓存,所以它不能正确更新。之前我们已经告诉他们按下CTRL + F5,但我正在寻找一种以编程方式执行此操作的方法。

我使用下面的代码

this.$window.location.reload(true); 

其功能签名声明,像这样:

reload(forcedReload?: boolean): void; 

这是否意味着它会跳过缓存?当我尝试了CTRL + F5中的index.html显示200在Chrome的网络选项卡,但使用$window.location.reload(true)显示304 [未修改]

+1

根据[MDN](https://developer.mozilla.org/en-US/docs/Web/API/Location/reload),似乎是这样。但是,除了忽略缓存之外,ctrl + F5过程可能会有一些差异。 – Nisarg

+0

如果您在构建过程中版本化您的资源和脚本文件,仍然可以使用'$ window.location.reload()'获取最新版本。 – Gaara

+0

@Gaara谢谢,我版本的所有资源,所以它听起来像这样会工作 – Chris

回答

0

根据MDNforcedReload参数window.location.reload,当设置为true

...导致页面总是从服务器重新加载。如果它是 错误或未指定,则浏览器可能会从其缓存中重新加载页面。

0

不,这不是(通过试验证明)

主要区别:Ctrl-F5将导致所有附加的资源也重装(脚本,图片......),而reload(true)不会,主网页(HTML)将被要求,但资源仍然可以从缓存

+0

主页是我想要刷新的唯一的东西。 – Chris

+0

页面将用两种方式刷新,304表示(如果这是关键点)是服务器决定缓存页面与实际页面相同 – MaanooAk

2

你有没有尝试加载例如:

$window.location.href = currentUrl + '?' + new Date().getTime(); 

这应该强制进行冷刷新。

相关问题