DOMException: 注册失败 - 权限被拒绝。

5
我有一个网页通知脚本,它运行良好。然而,在测试Chrome 43版本时,我遇到了错误"DOMException:Registration failed - permission denied"。此错误发生在订阅阶段。
以下是常规注册过程的代码片段:
navigator.serviceWorker.register('sw.js').then(function(reg) {
    console.log('[ServiceWorker] Registration Obj', reg);
    reg.pushManager.subscribe({
        userVisibleOnly: true
    }).then(function(sub) {
        //This never executes and catch gets called
        console.log('Subscription successful, Subscription endpoint:', sub.endpoint);
    }).catch(function(error) {
        console.log("Error during subscription ", error);
    });
}).catch(function(error) {
    if (Notification.permission === 'denied') {
        console.warn('Permission for Notifications was denied');
    } else {
        console.error('Unable to subscribe to push.', error);
    }
});

在上述代码中,错误发生在我执行reg.pushManager.subscribe()的步骤中。
  • 这种情况在Chrome 49中不会发生。
  • 这个错误总是发生在Chrome 43版本上。

[注意]我认为这是Chrome 43版本的普遍问题,但当我检查像goroost.com和pushcrew这样的网站时,它们似乎运行良好。只有我的网站不能正常工作。


您是否已将正确的gcm_sender_id和gcm_user_visible_only值链接到页面上的清单中? - Marco Castelluccio
是的,清单中有这两个字段。而且它也适用于其他版本的Chrome。 - Hari Krishnan
哪个catch函数被调用了?最后一个?如果是这样,那么两个消息中的哪一个会被记录?最后一个问题,为什么需要支持这么旧的Chrome版本?它已经发布将近一年了! - Marco Castelluccio
1
你找到解决方案了吗? - Marklar
3个回答

12

我遇到了这个问题。 除了prajnavantha提供的答案外,这可能是因为当浏览器阻止通知时意外点击了它。 要在Chrome中修复此问题,请转到“设置”->点击“显示高级设置”->在“隐私”下点击“内容设置”->然后在“通知”下选择“管理例外情况”。进入这里后,允许URL受影响的通知。


1
这个解决方案对我很有效,令人震惊的是因为我以前从未实现过推送功能,更不用说在出错的网站上了。这怎么可能发生? - zoltar
1
对我很有帮助,因为我也遇到了设置新订阅的问题。非常感谢。顺便说一下,使用Chrome版本62.0.3202.94。 - natterstefan
1
在基于Chromium网络浏览器的Brave浏览器中也可以使用:brave://settings/privacy 打开“使用Google服务推送消息”。 - Paolo Biavati

5

我面临了类似的问题。

  1. 检查你的 manifest.json。由于你已经说它在更高版本可以工作,我假设你在 manifest 中漏掉了一些内容。在这个链接中,Matt Gaunt指出如果 manifest 出现问题,就可能导致此错误。

  2. 确保结尾没有逗号。

  3. 另外,版本43不支持通知对象中的数据属性,并且在单击通知时不允许打开窗口,因此你需要解决这些问题。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接