Lan*_*opp 1 javascript service-worker sw-precache
我正在尝试使用sw-precache设置 service worker来缓存 CDNJS 中的资产以供离线使用。不幸的是,这似乎不起作用。这是我到目前为止所拥有的:
在加载任何脚本之前index.html:
<script type='text/javascript'>
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/js/service_worker.js')
.then(function() {
console.log("Service Worker Registered")
})
}
</script>
Run Code Online (Sandbox Code Playgroud)
这是我用来生成服务工作者的 Gulp 任务:
const config = require('../config')
const gulp = require('gulp')
const swPrecache = require('sw-precache')
gulp.task('serviceWorker', (callback) => {
swPrecache.write(config.build.serviceWorker, {
runtimeCaching: [
{
urlPattern: /^https:\/\/cdnjs\.cloudflare\.com/,
handler: 'networkFirst'
}
]
}, callback)
})
Run Code Online (Sandbox Code Playgroud)
当我运行该应用程序时,我看到已Service Worker Registered登录到控制台。但是,如果我断开 wifi 连接,应用程序将无法加载脚本。我究竟做错了什么?
您正在某个 JS 路径注册服务工作者/js/service_worker.js。这里的 scope 限制了 service worker 只能控制该路径下的指定内容/js/。
I suggest you to register service worker at root level 即 www.example.com/ 那么您就可以控制在该域下提供的所有页面。