如何在 Chrome 中通过 iframe 订阅 pushManager?

How subscribe pushManager via iframe in Chrome?

我可以通过 iframe 注册 Service Worker。当我尝试 运行 "pushManager.subscribe" 我有:

DOMException: Registration failed - permission denied

此问题仅在 Chrome 通过 iframe 时出现。它在 Firefox 中运行良好。在 Chrome

中没有 iframe 也能正常工作

Chrome 要求您订阅从顶级域推送,否则用户允许推送的来源不太清楚。

长话短说,你做不到! 您注册服务工作者的路径必须打开(是顶级域)才能注册服务工作者。 实现此目的的一种方法是:

假设您的 iframe 如下所示:

 <iframe src="https://example.com"></iframe>

使用 postMessage 与 iframe 通信并请求权限,然后 window.open("https://example.com/") 注册 service-worker 并获取令牌。

希望这对您有所帮助:)

您不能使用 iframe,这是不允许的。

权限请求必须从顶层执行window。

唯一的选择(例如,我们已将其用于 Pushpad Express)是从 iframe 重定向到/打开一个新的 window,然后请求顶级 window 的许可,最后重定向回来。

这是为了让用户清楚哪个网站正在请求推送通知的权限。否则担心的是,例如广告可能会显示推送通知提示,这会产生误导。

顺便说一句,我还建议为 iframes 的 sandbox 属性添加一个新值,以便允许提示推送通知,但规范目前不支持它。