未在Angular中注册Service Worker

时间:2019-11-11 22:36:58

标签: javascript angular

我想向我的Angular应用发送推送通知。我是用Vanilla js而不是Angular服务工作者或@ angular / pwa来完成的。

我在angular.json的脚本选项中添加了js文件的路径。当服务工作者要注册时,它会从根(http://127.0.0.1:8887/sw.js)而不是从我将文件放入的文件夹中重定向路径。

这是angular.json文件:

    "scripts": [
      "./src/assets/js/main.js",
      "./src/assets/js/sw.js"
    ]

main.js文件:

const applicationServerPublicKey = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

let isSubscribed = false;
let swRegistration = null;

if ('serviceWorker' in navigator && 'PushManager' in window) {
    console.log('Service Worker and Push is supported');

    navigator.serviceWorker.register('/sw.js')  // I tried ./sw.js and also /src/assets/js/sw.js and sw.js alone
    .then(function(swReg) {
      console.log('Service Worker is registered', swReg);

      swRegistration = swReg;
    })
    .catch(function(error) {
      console.error('Service Worker Error', error);
    });
  } else {
    console.warn('Push messaging is not supported');
    pushButton.textContent = 'Push Not Supported';
  }

service worker文件仅用于测试当前文件是否可以访问:

console.log('sw');

这是错误:

Service Worker Error TypeError: Failed to register a ServiceWorker for scope ('http://127.0.0.1:8887/') with script ('http://127.0.0.1:8887/sw.js'): A bad HTTP response code (404) was received when fetching the script.

1 个答案:

答案 0 :(得分:0)

问题已解决,我必须将路径/assets/js/sw.js添加到navigator.serviceWorker.register('/assets/js/sw.js')