html - 防止 Chrome 中的 iframe 缓存

标签 html google-chrome caching browser-cache google-chrome-app

我有一个为测试智能电视网络应用而编写的模拟器。模拟器本身是一个网络应用程序,有一个简单的界面,显示电视和 Remote ,并在 iframe 中加载正在测试的网络应用程序。用户从命令行启动模拟器,这会启动两个简单的 HTTP 服务器(一个用于模拟器,一个用于正在测试的 Web 应用程序),然后使用 --app 命令行开关将其指向我的模拟器启动 chrome。

问题是每次 Chrome 启动时,它都会加载网络应用程序的缓存版本。如果您在上次启动后对 Web 应用程序进行了更改,则在您硬刷新页面之前,这些更改不会显示。

为了解决这个问题,我尝试了以下方法:

  • 通过添加 --disable-cache 开关启动 Chrome
  • 将随机查询参数附加到传递给 chrome 的启动 URL(例如:--app=http://localhost:6001/?random={some_hash})
  • 将随机查询参数附加到 iframe 中指定的网络应用程序 URL

然而,这些似乎都不起作用。模拟器代码似乎没有被缓存,因为 iframe 中的 src URL 确实每次都会附加一个新的随机值。然而,在 iframe 中加载的页面是旧的,并且在初始启动后总是需要刷新。

我还可以尝试上面没有提到的任何其他事情吗?

问题的进一步示例:

  • 用户首次为 web app 1 启动模拟器
    • 网络应用 1 在模拟器中显示
  • 用户关闭模拟器
  • 用户为网络应用 2 启动模拟器
    • 网络应用 1 在模拟器中显示

在这种情况下,模拟器将启动并仍然显示网络应用 1。它会通过刷新继续显示网络应用 1,直到用户执行硬刷新 (cmd+shift+r),此时网络应用 2 最终显示.

最佳答案

听起来这可能与这里的错误有关: https://code.google.com/p/chromium/issues/detail?id=324102

作为解决方法,我发现从 javascript 设置 iframe src 以及将随机查询参数附加到 URL 似乎可以解决问题。简单地做一个或另一个是行不通的。

例子:

// still loads stale page
document.getElementById('tv-screen').src = 'http://localhost:6001/'; 

// will load fresh page
document.getElementById('tv-screen').src = 'http://localhost:6001/?rand=' + Math.round(Math.random() * 10000000);

关于html - 防止 Chrome 中的 iframe 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732519/

相关文章:

html - 如何删除表单顶部的空白?

html - 在自定义范围输入中显示刻度位置

html - 忽略 Beautifulsoup Find_All 中的重复项

javascript - 用正则表达式替换字符串,即奇怪的结果

ruby - 为散列生成缓存键(唯一键)

html - CSS3、HTML5、Javascript : How to make divs fade in?

node.js - Puppeteer:如何在没有 CSS/JS/fonts/images 的情况下只加载 html?

javascript - list 不是有效的 JSON。怎么了?

python - 如何在 Django 的内存中保存共享功能对象?

java - Java中使用hashmap的简单缓存