vue 打包后 在 iframe 的缓存如何解决?

我有两个页面 pageA,pageB , 其中 pageBpageAiframe

image.png

参照了网上的 配置

https://juejin.cn/post/700316...
https://www.jb51.net/article/...

vue.config.js 设置了

configureWebpack: config => {
    config = {
        filename:'static/js/[name].[contenthash:8].' + timestamp + '.js',
        chunkFilename:'static/js/[name].[contenthash:8].' + timestamp + '.js'
    }
}

单独打开 pageB 浏览器如下 , 这些都是 正常的 (存在时间戳)

image.png



但是当我单独打开 pageA 的时候, 发现 还是 更新前的配置 (不存在时间戳)

image.png

阅读 3.3k
3 个回答

是iframe进行对pageB进行缓存了,你要不对iframe中的pageB加上版本号,比如http://xxx.com?version=132432,这样就能更新缓存了,你只是对pageB的生成时间戳是没用的,他pageA记录的是pageB之前的index缓存

正常情况下,浏览器是不会强缓存首个页面html文件,所以单独打开pageA,pageB时,html文件都是读最新的;
而对于html文件下的静态资源,浏览器会尽可能的缓存,很可能是强缓存-读取浏览器本地缓存,不会访问服务器(不同浏览器的默认缓存机制可能有不同),如css、js、iframe下的html之类,所以访问pageA时,iframe下的pageA读的是浏览器本地缓存而不是最新的。

不缓存iframe下的pageA的方法:
1、可以在服务器设置不强缓存所有html文件:
Cache-Control:no-cache并搭配If-Modified-Since,浏览器每次询问服务器html文件是否最新(协商缓存)
或 Cache-Control: no-store - 不使用任何缓存
2、url设置hash
每次请求iframe下的pageA都加上当前时间戳,如pageA?time=xxx当前时间;
如果pageA,pageB是同一个项目或pageB、pageA会同时发布,hash可以为构建时间 pageA?time=xxx构建时间

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏