防止在Chrome中使用iframe缓存

Dan*_*nny 3 html caching google-chrome browser-cache google-chrome-app

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

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

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

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

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

我可以尝试的其他任何我没有涉及的内容吗?

进一步的问题示例:

  • 用户首次为Web应用程序启动模拟器1
    • Web应用程序1在模拟器中显示
  • 用户关闭模拟器
  • 用户启动Web应用程序2的模拟器
    • Web应用程序1在模拟器中显示

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

Dan*_*nny 7

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

作为一种解决方法,我发现从javascript设置iframe src ALONG将随机查询参数附加到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);
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以简单地使用时间戳:''http:// localhost:6001 /?rand ='+(+ new Date())` (2认同)