我可以通过 iframe 注册服务人员。当我尝试运行“pushManager.subscribe”时,我有:
DOMException: Registration failed - permission denied
此问题仅在通过 iframe 的 Chrome 中出现。它在 Firefox 中运行良好。并且在 Chrome 中没有 iframe 时效果很好
我可以通过 iframe 注册服务人员。当我尝试运行“pushManager.subscribe”时,我有:
DOMException: Registration failed - permission denied
此问题仅在通过 iframe 的 Chrome 中出现。它在 Firefox 中运行良好。并且在 Chrome 中没有 iframe 时效果很好
您不能使用 iframe,这是不允许的。
权限请求必须从顶层窗口执行。
唯一的选择(例如,我们用于 Pushpad Express 的)是从 iframe 重定向到/打开一个新窗口,然后从顶层窗口请求许可,最后重定向回来。
这是为了让用户清楚哪个网站正在请求推送通知的权限。否则,担心例如广告可能会提示推送通知,这会产生误导。
顺便说一句,我还建议为 s 的sandbox
属性添加一个新值,iframe
以允许提示推送通知,但规范目前不支持它。
长话短说,你不能!您注册服务工作者的路径必须打开(是顶级域)才能注册服务工作者。实现这一目标的一种方法是:
假设您的 iframe 如下所示:
<iframe src="https://example.com"></iframe>
使用 postMessage 与 iframe 通信并请求许可,然后window.open("https://example.com/")
注册 service-worker 并获取令牌。
希望这可以帮助 :)
Chrome 要求您从顶级域订阅推送,否则不太清楚用户允许推送的来源是什么。