Edge 17 - PushManager.Subscribe 失败并出现 AbortError

Posted

技术标签:

【中文标题】Edge 17 - PushManager.Subscribe 失败并出现 AbortError【英文标题】:Edge 17 - PushManager.Subscribe fails with 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 配置错误引起的。确保您的服务器可以公开解析,然后通知应该可以工作。 【参考方案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 的可用性,订阅对象只有在推送服务提供商响应订阅对象时才会创建。

以上是关于Edge 17 - PushManager.Subscribe 失败并出现 AbortError的主要内容,如果未能解决你的问题,请参考以下文章

Edge17 - SEC7136 - 原点未通过资源的完整性检查

2017.10.17关于结构体初始化(例如 Edge 中的 pow)的一些问题

Docker安装----------ubuntu

Docker安装

centOS创建容器

微软即将为Edge推出新的开发工具协议