服务人员显示通知不起作用

Nik*_*ili 6 javascript service-worker

navigator.serviceWorker.register('/service-worker.js').then((reg) => {

})



Notification.requestPermission(function(result) {
    console.log('User Choice', result);
    if (result !== 'granted') {
      console.log('No notification permission granted!');
    } else {
        navigator.serviceWorker.ready
        .then(function(swreg) {
            console.log("blaxblux");
          swreg.showNotification('Successfully subscribed!', {body:'TEST'});
        });
    }
  });
Run Code Online (Sandbox Code Playgroud)

这是我的代码 main.js

它涉及console.log('blaxblux'),但根本不显示通知。请求权限在浏览器显示带有允许按钮的弹出窗口时起作用。

什么事情可能是问题?

(我使用的是最新版本的 chrome)

bir*_*win 12

我遇到了类似的问题,但在我的 Windows 机器上为 Google Chrome 关闭了通知。我继续启用通知,他们神奇地开始工作。

Settings -> System -> Notifications & Actions
Run Code Online (Sandbox Code Playgroud)

向下滚动到“从这些发件人处获取通知”部分并确认“Google Chrome”(或您的首选浏览器)设置为“开启”


小智 1

也许这篇文章可以帮助https://developers.google.com/web/fundamentals/push-notifications/subscribing-a-user#requesting_permission

用于获取权限的 API 最近从采用回调更改为返回 Promise。这样做的问题是,我们无法判断当前浏览器实现了哪个版本的 API,因此您必须同时实现并处理两者。

function askPermission() {
  return new Promise(function(resolve, reject) {
    const permissionResult = Notification.requestPermission(function(result) {
      resolve(result);
    });

    if (permissionResult) {
      permissionResult.then(resolve, reject);
    }
  })
  .then(function(permissionResult) {
    if (permissionResult !== 'granted') {
      throw new Error('We weren\'t granted permission.');
    }
  });
}
Run Code Online (Sandbox Code Playgroud)