Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 防止Chrome中的iframe缓存_Html_Google Chrome_Caching_Browser Cache_Google Chrome App - Fatal编程技术网

Html 防止Chrome中的iframe缓存

Html 防止Chrome中的iframe缓存,html,google-chrome,caching,browser-cache,google-chrome-app,Html,Google Chrome,Caching,Browser Cache,Google Chrome App,我有一个我为测试智能电视网络应用程序而编写的模拟器。emulator本身是一个web应用程序,具有一个简单的界面,显示电视和远程设备,并在iframe中加载正在测试的web应用程序。用户从命令行启动emulator,启动两个简单的HTTP服务器(一个用于emulator,一个用于正在测试的web应用),然后使用--app命令行开关启动chrome,将其指向我的emulator 问题是,每次Chrome启动时,它都会加载一个缓存版本的web应用程序。如果自上次启动以来您对web应用进行了更改,则在

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

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

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

  • 通过添加--disable cache开关启动Chrome
  • 将随机查询参数附加到传递给chrome的启动URL(例如:
    --app=http://localhost:6001/?random={some_hash}
  • 将随机查询参数附加到iframe中指定的web应用程序URL
然而,所有这些似乎都不起作用。仿真器代码似乎没有被缓存,因为iframe中的src URL确实每次都会附加一个新的随机值。但是,iframe中加载的页面是旧的,并且在初始启动后总是需要刷新

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

问题的进一步示例:

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

在这种情况下,emulator将启动并仍然显示web app 1。它通过刷新继续显示web app 1,直到用户执行硬刷新(cmd+shift+r),此时web app 2最终显示。

听起来这可能与此处的错误有关:

作为一种解决方法,我发现从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);

由于您控制服务器,您是否尝试过在响应头中包含禁用缓存的所有可能指令?这一点很好。虽然我不知道该怎么办。emulator打包为ruby gem,我使用webrick作为http服务器。我想我需要在谷歌上搜索一下。所以为了更新,我修改了服务器的响应头,包括了所有可能的禁用缓存的指令(ETag、Last modified、Cache Control、Expires、Pragma),但它没有做到这一点。Chrome对iFrame的处理有问题吗?这能回答你的问题吗
Math.round(Math.random()*10000000)
=Brilliant!或者您可以简单地使用时间戳:
'http://localhost:6001/?rand=“+(+new Date())
你可以去吗?兰德=”+new Date()/1