Bra*_*rad 14 javascript google-chrome progressive-web-apps
如何关闭/退出我的 PWA?
我以为我能够做到这一点:
window.close();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致通常的错误:
脚本可能只关闭由它打开的窗口。
有没有办法以编程方式关闭我的 PWA?
因此,请遵循有关此的 MDN 文档:
过去,当您直接调用 window 对象的 close() 方法而不是在 window 实例上调用 close() 时,浏览器会关闭最前面的窗口,无论您的脚本是否创建了该窗口。这已不再是这种情况; 出于安全原因,不再允许脚本关闭它们没有打开的窗口。
遵循生活标准
如果 current 为 null 或其正在关闭为 true,则返回。(这是问题出现的时候,因为浏览上下文为空,除非您使用 javascript 上下文打开一个新文档)
如果以下所有情况都为真:
- 当前是脚本可关闭的
- 现任全局对象的浏览上下文熟悉当前
- 允许当前全局对象的浏览上下文导航当前
同样从第二部分开始,脚本将被视为不可关闭脚本(这里有更多信息)
如果浏览上下文是由脚本(而不是由用户的操作)创建的辅助浏览上下文,或者如果它是会话历史记录仅包含一个 Document 的顶级浏览上下文,则该浏览上下文是脚本可关闭的。
所以我担心在现代浏览器中,如果不控制打开它的人,就不可能真正关闭当前选项卡。这也适用于 iframe 打开的窗口。所有信息都在我链接的当前标准中,原因在我引用的标准中。几年前,有一些使用open("", "_self")和类似解决方案的变通方法,但我相信这个已经被修补了。
在 PWA 的情况下,只要浏览历史记录中没有推送事件,您将只能关闭应用程序(这意味着window.history.length整个导航保持 1。在这种情况下,您的应用程序将被视为顶级浏览上下文只有一个文档,因此window.close()就可以了。可以测试最后一个确认:转到 twitter.com -> 安装 Twitter PWA -> 打开 PWA -> 打开控制台并写入window.close(),它会立即关闭窗口。在它的那一刻导航到 PWA 中的任何链接,不满足历史只有一个文档的条件。
额外试图找出为什么这是一个安全问题:https : //security.stackexchange.com/questions/120116/security-feature-preventing-javascript-from-closure-the-window
| 归档时间: |
|
| 查看次数: |
2731 次 |
| 最近记录: |