JavaScript функция выполняет consol.log (var), но не var2 = var - PullRequest
0 голосов
/ 01 августа 2020

Я следую этому руководству: https://developers.google.com/web/fundamentals/codelabs/push-notifications#notification_click и реализовал его в VueJS.

На созданном хуке я запускаю эту функцию:

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

        navigator.serviceWorker
          .register("/sw.js")
          .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";
      }
    }

Моя консоль в Chrome, Safari и Firefox печатает:

"Service Worker and Push is supported"
"Service Worker is registered >ServiceWorkerRegistration"
"Service Worker Error ReferenceError: swRegistration is not defined"

Кто-нибудь знает, почему swReg может регистрироваться, но swRegistration не назначается?

.then(function (swReg) {
                console.log("Service Worker is registered", swReg);
                swRegistration = swReg;

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Сначала вы должны объявить swRegistration, вы не столкнетесь с такой же проблемой с swReg, потому что это результат обещания регистрации.

register() {
      let swRegistration = null;
      if ("serviceWorker" in navigator && "PushManager" in window) {
        console.log("Service Worker and Push is supported");

        navigator.serviceWorker
          .register("/sw.js")
          .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";
      }
    }
1 голос
/ 01 августа 2020

Может потому, что swRegistration не определяется? Попробуйте добавить let swRegistration вверху вашего фрагмента, и все будет в порядке. Наслаждайтесь.

...