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 - 原点未通过资源的完整性检查