<img /> 标签未使用 Workbox 缓存
Workbox cache not used by <img /> tag
设置
"workbox-cdn": "^5.1.4",
"nuxt": "^2.15.2"
上下文
我的应用程序 Pictalk 让用户可以保存和获取象形图。所以基本上每个用户都有一套自定义的象形图。目前,它只能在线使用,但我想实现离线模式。
技术细节
我用 html <img .../>
标签显示我所有的象形图。
每次我加载一个新的象形图时,我都会这样做:
created(){
if(navigator.onLine){
caches.open('pictos').then((cache) => {
cache.add(this.collection.path)
.then(() => {})
.catch((err)=> {console.log(err)})
});
}
},
这是缓存存储的屏幕截图:
正如我们所见,URL 是正确的并且请求被正确缓存。
问题
<img .../>
标签不使用我创建的工作箱缓存。
找到解决方案 here and here。
这是我必须修改的文件才能使其正常工作:
首先,我的 <img/>
标签必须使用 crossorigin="anonymous"
方法:
<img class="image" style :src="path" crossorigin="anonymous"/>
一旦 <img/>
标签的来源变得更加灵活,我们就可以开始构建我们的自定义注册工作箱路由:
// plugins/workboxConfig.js
workbox.routing.registerRoute(
new RegExp('https://myapi\.somewhere\.com/pictalk/image/.*\.(png|jpg|jpeg)'),
new workbox.strategies.CacheFirst({
cacheName: 'pictos',
plugins: [
new workbox.cacheableResponse.CacheableResponsePlugin({ statuses: [200] }),
new workbox.rangeRequests.RangeRequestsPlugin(),
],
matchOptions: {
ignoreSearch: true,
ignoreVary: true
}
}),
);
我必须在 nuxtjs.config.js
中声明此文件:
pwa: {
workbox: {
cachingExtensions: '@/plugins/workboxConfig.js'
}
}
设置
"workbox-cdn": "^5.1.4",
"nuxt": "^2.15.2"
上下文
我的应用程序 Pictalk 让用户可以保存和获取象形图。所以基本上每个用户都有一套自定义的象形图。目前,它只能在线使用,但我想实现离线模式。
技术细节
我用 html <img .../>
标签显示我所有的象形图。
每次我加载一个新的象形图时,我都会这样做:
created(){
if(navigator.onLine){
caches.open('pictos').then((cache) => {
cache.add(this.collection.path)
.then(() => {})
.catch((err)=> {console.log(err)})
});
}
},
这是缓存存储的屏幕截图:
问题
<img .../>
标签不使用我创建的工作箱缓存。
找到解决方案 here and here。
这是我必须修改的文件才能使其正常工作:
首先,我的 <img/>
标签必须使用 crossorigin="anonymous"
方法:
<img class="image" style :src="path" crossorigin="anonymous"/>
一旦 <img/>
标签的来源变得更加灵活,我们就可以开始构建我们的自定义注册工作箱路由:
// plugins/workboxConfig.js
workbox.routing.registerRoute(
new RegExp('https://myapi\.somewhere\.com/pictalk/image/.*\.(png|jpg|jpeg)'),
new workbox.strategies.CacheFirst({
cacheName: 'pictos',
plugins: [
new workbox.cacheableResponse.CacheableResponsePlugin({ statuses: [200] }),
new workbox.rangeRequests.RangeRequestsPlugin(),
],
matchOptions: {
ignoreSearch: true,
ignoreVary: true
}
}),
);
我必须在 nuxtjs.config.js
中声明此文件:
pwa: {
workbox: {
cachingExtensions: '@/plugins/workboxConfig.js'
}
}