我有一个为测试智能电视网络应用而编写的模拟器。模拟器本身是一个网络应用程序,有一个简单的界面,显示电视和 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/