【问题标题】:Edge 17 - PushManager.Subscribe fails with AbortErrorEdge 17 - PushManager.Subscribe 失败并出现 AbortError
【发布时间】:2018-06-10 08:38:06
【问题描述】:

Edge 17 支持 Service Worker,显然还支持 PushManager。

但是,即使我的推送通知实现在所有支持它们的浏览器中都可以工作,但它似乎不适用于 Edge。

if ('PushManager' in window) {
    registration.pushManager.subscribe({
        userVisibleOnly: true,
        applicationServerKey: urlBase64ToUint8Array('xxxxxxx')
    })
    .then(function(subscription) {
        console.log('All good');
    })
    .catch(function(err) {
        console.error(err);
    });
}

这在 'catch' 中失败:

[object DOMException]: {code: 20, message: "AbortError", name: “中止错误”}

这是 Edge 的已知问题吗?我做错了什么吗?

【问题讨论】:

  • 您确定 applicationServerKey 有一个值并且它不是“null”或“undefined”吗?
  • @WarPro 是的,它适用于所有其他浏览器。
  • 我对 Edge 有完全相同的问题。你找到解决办法了吗?
  • @Nevius - 不......我想这只是微软创建自己的“标准”,所以我们必须做一些与其他浏览器完全不同的事情,才能让它在他们的浏览器上工作。
  • 我们遇到了同样的问题,它是由我们服务器中的 DNS 配置错误引起的。确保您的服务器可以公开解析,然后通知应该可以工作。

标签: push-notification microsoft-edge service-worker pwa


【解决方案1】:

我遇到了这个错误,所以我查看了这个有效的代码:

https://webpushdemo.azurewebsites.net/

为我解决的问题是这部分:

navigator.serviceWorker.ready.then(/* registration function here*/

【讨论】:

  • 好点,我认为这应该是更好的做法。我做了改变,但我仍然得到完全相同的错误。 navigator.serviceWorker.register('serviceworker.js'); navigator.serviceWorker.ready.then(function(registration) {
  • 我遇到的唯一其他问题是如果 userVisibleOnly 未设置为 true。它现在似乎一直在工作。
  • 是的 - 我从一开始就将 userVisibleOnly 设置为 true :)
【解决方案2】:

我在 Edge 上遇到了完全相同的问题,但是在 Chrome 上运行良好,并且还尝试了不同系统的多个选项,认为这是我的代码的问题,但是它在某个时间开始工作,完全相同的代码工作,即订阅对象正在创建中。

>

reg.pushManager.subscribe(subscribeParams)
        .then(function (subscription) {
            console.log('[subscribe] : user subscribed');
        })

【讨论】:

  • 这正是我在上面的示例代码中所拥有的,并且不起作用。希望当 Microsoft 发布基于 Chromium 的 Edge 时,这将得到解决:)
  • 我相信这不是浏览器的问题,而是推送服务提供商和 API 的可用性,订阅对象只有在推送服务提供商响应订阅对象时才会创建。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 2017-11-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多