1

我可以通过 iframe 注册服务人员。当我尝试运行“pushManager.subscribe”时,我有:

DOMException: Registration failed - permission denied

此问题仅在通过 iframe 的 Chrome 中出现。它在 Firefox 中运行良好。并且在 Chrome 中没有 iframe 时效果很好

4

3 回答 3

3

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

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

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

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

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

于 2016-10-26T09:26:54.590 回答
2

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

假设您的 iframe 如下所示:

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

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

希望这可以帮助 :)

于 2016-10-26T07:30:14.780 回答
0

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

于 2016-10-25T19:02:43.983 回答