$window.location.reload(true)是否等同于CTRL+F5?

5

我试图构建一个“版本更新”组件,当网站被更新时会显示一个横幅,并提示用户重新加载。不幸的是,当一些用户重新加载页面时,它们被缓存,因此无法正确更新。以前我们告诉他们按CTRL+F5,但我正在寻找一种程序化的方法来实现这一点。

我正在使用以下代码:

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

这个函数的签名声明如下:

reload(forcedReload?: boolean): void;

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


1
根据MDN的说法,似乎是这样。但除了忽略缓存之外,ctrl + F5过程中可能还存在一些差异。 - Nisarg Shah
如果您在构建过程中对资源和脚本文件进行版本控制,您仍然可以使用 $window.location.reload() 始终获取最新版本。 - Gaara
@Gaara 谢谢,我对所有资源进行版本控制,所以这应该可以运行。 - Chris
管理服务器上的缓存设置 - F5 应该足够了。 - Petr Averyanov
@NisargShah 请将您的评论写成答案,以便我可以接受它。 经过更多测试,这符合文档要求,谢谢。 - Chris
@Chris,完成了!如果你发现了一些可能有助于他人的东西,请随意添加。 :) - Nisarg Shah
3个回答

3

没有经过测试证明

主要区别:Ctrl-F5会导致所有附加的资源(脚本、图片等)也重新加载,而reload(true)则不会,主页面(HTML)将被请求,但资源仍可以从缓存中加载。


主页是我想要刷新的唯一页面。 - Chris
页面将使用两种方式进行刷新。如果这是关键点的话,304表示服务器决定缓存页与实际页相同。 - MaanooAk

2
根据MDN,在window.location.reload中设置forcedReload参数为true时:

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


2

你尝试过类似以下的操作吗:

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

那应该强制进行全新刷新。

1
你应该检查URL是否存在参数和锚点。 - Imanuel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接