【问题标题】:Why isn't Google Chrome reloading my scripts?为什么谷歌浏览器不重新加载我的脚本?
【发布时间】:2012-04-06 15:13:52
【问题描述】:

所以,我有一个名为“engine”的脚本,经过多次头疼和(徒劳的)调试后,我发现 GC 根本没有重新加载它!

这就是我将它包含在网页中的方式(在<head> 元素内):

<script type="text/javascript" src="engine.js"></script>

当在脚本开头放置 10 个console.log("asdf"); 时,就好像它们不存在一样。当我转到 GC 控制台中的“资源”选项卡时,我看到该脚本没有应用任何更改!哈哈?最后加上+ "?" + new Date() 会有帮助吗?

【问题讨论】:

  • 应该是从缓存中加载,解决方法是ctrl + F5
  • 在我看来是缓存问题。
  • 是的,另一个问题是我的页面不会重新加载。我不知道为什么,它只是停止重新加载。我按“F5”,图标变成一个小圆圈,然后什么也没有。没有错误,重新加载也是需要时间的。
  • 您已经尝试过其他浏览器以确保它是 GC 特定的东西,而不是拼写错误(或其他东西),对吧?
  • 唔哈!重新加载在 Firefox 中有效!但是,问题仍然存在:为什么我不能在 GC 中重新加载它?

标签: javascript html google-chrome


【解决方案1】:

适用于 Chrome、Firefox 和 IE 的通用解决方案是通过 Ctrl+Shift+Del 清理缓存(在 Mac +Shift+)。

Chrome 解决方案 #1

  1. 打开开发人员工具(F12++i,或右键单击 → 检查)。
  2. 选择网络标签并勾选禁用缓存复选框。

  1. 重新加载页面。

❗️注意:只有在开发工具窗口打开时,缓存才会被禁用

Chrome 解决方案 #2

这仅在不使用 #1 时才有意义。

  1. 打开开发者工具。
  2. 点击右下角的设置齿轮图标。
  3. 在出现的对话框中,选择 Network 小节下的 Disable cache 复选框:从现在开始,当开发工具窗口打开。当 devtools 窗口关闭时,缓存将照常工作。

Chrome 解决方案 #3:清空缓存 + 硬重载

  1. 打开开发者工具(否则下一步的菜单将不会显示)。
  2. 点击并按住刷新按钮,然后从下拉列表中选择清空缓存和硬重新加载

修改javascript代码

可用于调试的与浏览器无关的解决方案是在您的服务器端代码中附加一个随机生成的版本字符串作为查询参数,即将您的脚本称为:

&lt;script type="text/javascript" src="myscript.js?ver=12345"&gt;&lt;/script&gt;

ver 参数的值发生变化时,此技巧将强制浏览器重新加载脚本。如果您发出 ajax 请求,则可以将 "?ver=" + new Date().getTime() 附加到您的 URL。

注意:完成调试后不要忘记删除该参数,因为在生产环境中您很可能确实希望缓存脚本。虽然在每个新构建上生成一个新的时间戳是一种常见的做法 - 这可以在生产中使用,并确保在新部署之后客户端将始终获得更新的脚本。


与上述所有解决方案不同,即使您在客户端和服务器之间有某种缓存(例如 redis、memcached、varnish)或 CDN(例如 akamai、cloudflare、cloudfront 等),这个解决方案也可以工作。

【讨论】:

  • 读者:将最喜欢的仅 chrome 解决方案作为已接受的答案。
  • 这太疯狂了!为什么“在生产中您很可能确实希望缓存脚本”?它们和其他任何资源一样都是一种资源。不询问服务器缓存的副本是否是最新的,这似乎是一个大错误!
  • @Daniel:您可以通过设置Cache-ControlIf-None-MatchIf-Modified-Since 对缓存资源的到期时间进行细粒度控制,以便对缓存资源的请求是仍然有效将返回 304 Not Modified (httpstatuses.com/304)。
【解决方案2】:

脚本可能被缓存,因此旧版本正在从缓存中加载。如果您想确保获得新版本,可以强制重新加载浏览器、清除浏览器缓存或更改脚本名称或在文件名末尾添加不同的查询参数。

【讨论】:

  • 您也可以转到 Chrome DevTools 并单击设置 - 然后您可以选择:“禁用缓存”,这对开发模式很有用。它仅在 Chrome Canary 中(目前)。
  • @IdoGreen 有时在 Chrome 18、19 和 20 中,Ctrl+F5 实际上不会清除缓存,但这个技巧非常有用!谢谢!
【解决方案3】:

这也困扰着我; CTRL+F5 或 SHIFT+F5 从来没有用过... 唯一可行的方法是打开您的开发工具(按 F12),然后右键单击地址栏旁边的重新加载图标,然后选择“硬重新加载”或“空缓存和硬重新加载”

【讨论】:

    【解决方案4】:

    正如我在评论中所说,我猜这是一个缓存问题,一个 CTRL+F5 应该就足够了,以防它不能用于 CTRL+SHIFT+CANCE 并清除浏览数据。但是有时它是具有某种缓存的服务器,我说因为使用 IBM WebSphere,我经常遇到缓存问题,而我无法在浏览器上使用简单的 F5 来解决这些问题。我只需要等待我的网络服务器“刷新”自己。

    【讨论】:

    • 我想我需要打开另一个问题,因为出现了更大的问题......正如我在评论中所说,我无法重新加载页面!
    【解决方案5】:

    在 2016 年 10 月 21 日最新的 chrome 稳定版中。

      打开开发者工具(F12 或右键单击 > 检查或地址栏右上角的垂直省略号图标 > 更多工具 > 开发者工具)。
      点击开发者工具导航栏右上角的垂直省略号图标 > 设置。
      在首选项部分找到网络 > 禁用缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 2021-05-17
      • 2023-04-09
      相关资源
      最近更新 更多