我在Angular2 +(v.4.1.0约)应用上写了一个非常基本的服务工作者。 sw.js文件位于src
目录。
文件夹结构类似于:
src/
app/
assets/
environments/
favicon.ico
index.html
sw.js
styles.css
我正在尝试使用index.html
中的以下代码注册它:
<body>
<app-root>Cargando...</app-root>
<script>
if('serviceWorker' in navigator){
navigator.serviceWorker
.register('/sw.js',{scope: './'})
.then(() => {
console.log("Service Worker Registered. ");
})
.catch((err) => {
console.log("Service Worker failed to register: " + err);
})
} else {
console.log("Service what?");
}
</script>
</body>
问题是,当我运行开发服务器时(我正在使用Angular CLI,所以webkit-dev-server我猜),它找不到sw.js(它是否在编译中“包含”?)。但是,如果我将其添加为资产,我可以使用navigator.serviceWorker.register('assets/sw.js')
成功注册,但当我想成为/assets/
时,SW范围现在更改为/
。
如何在根范围内注册Service Worker? 谢谢。
答案 0 :(得分:1)
如果您希望您的服务工作文件sw.js
保留在src目录中并仍然作为资产包含在内,则必须将其添加到资产下的.angular-cli.json
:
(...)
"outDir": "dist",
"assets": [
"assets",
"sw.js"
],
"index": "index.html",
(...)