【问题标题】:Is $window.location.reload(true) the equivalent of CTRL+F5?$window.location.reload(true) 是否相当于 CTRL+F5?
【发布时间】:2017-08-11 08:04:28
【问题描述】:

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

我正在使用以下代码

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

谁的函数签名是这样声明的:

reload(forcedReload?: boolean): void;

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

【问题讨论】:

  • 根据MDN 看来是这样。但是在ctrl + F5的过程中除了忽略缓存之外可能会有一些不同。
  • 如果您在构建过程中对资源和脚本文件进行版本控制,您仍然可以使用$window.location.reload() 始终获取最新版本。
  • @Gaara 谢谢,我对我所有的资源进行了版本控制,所以听起来这可行
  • 管理服务器上的 chache 设置 - F5 就足够了。
  • @NisargShah 请写下您的评论作为答案,以便我接受。在测试更多之后,这可以按照文档工作,谢谢

标签: javascript angularjs browser-cache


【解决方案1】:

根据MDNwindow.location.reload中的forcedReload参数,当设置为true时:

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

【讨论】:

    【解决方案2】:

    不,不是(通过测试证明)

    主要区别:Ctrl-F5 将导致所有附加资源也重新加载(脚本、图像...),而 reload(true) 不会,将请求主页 (html) 但仍可以加载资源来自缓存

    【讨论】:

    • 主页面是我唯一要刷新的。
    • 页面会以两种方式刷新,304的意思(如果这是关键点的话)是服务器决定缓存的页面与实际页面相同
    【解决方案3】:

    您是否尝试过类似的方法:

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

    这应该会强制进行冷刷新。

    【讨论】:

    • 您应该检查现有参数和锚点的 URL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多