预检清单
- 我已阅读了此项目的 Contributing Guidelines。
- 我同意遵循此项目遵循的 Code of Conduct。
- 我在 issue tracker 中搜索了一个与我想提交的功能请求相匹配的功能请求,但没有成功。
问题描述
- 在 BrowserView 中执行 'window.close()' 的渲染进程不会导致窗口关闭(请参阅在此运行的 v21.2.2 上的 fiddle gist:https://gist.github.com/mesner/56cdab123bd4cdd890641303b0d29afe)。
- 我尚未找到任何确定浏览器视图中的窗口是否以编程方式调用 close 的方法的文档记录方法。
- 我在这里找到了一个关于 webcontents 的未记录/私有的 "close" 事件:https://github.com/electron/electron/blob/main/shell/browser/api/electron_api_web_contents.cc#L1215
- 该摘要显示,该事件是由在 browserview 中记录 "WEBCONTENTS.CLOSE" 触发的
- webcontents 的 close 方法将在 v22 中添加:feat: add webContents.close() #35509
- 注意,摘要在 v22.beta.3 中没有显示 BrowserView。我没有诊断为什么。
建议的解决方案
- 如果获得批准,我认为唯一必要的更改是将事件添加到 docs/api/web-contents.md 和侦听器中,并确保它们在 spec/api-web-contents-spec.ts 中触发。
- 编辑:我看到默认情况下会向发出的事件添加 preventDefault。CloseContents() 方法是否应该提前返回,如果被阻止?
考虑的其他方案
- 在 browserview 中执行 window.close() 以关闭它所属的浏览器窗口吗?这似乎有更大的影响风险。
- 编辑:browserview.on('close') 事件,但那将是第一个记录的 BV 事件
其他信息
如果获得批准,我很乐意为此提交 PR。
2条答案
按热度按时间s5a0g9ez1#
你认为呢?
4dbbbstv2#
我看到默认情况下会向发出的事件添加preventDefault。如果被阻止了,CloseContents()方法是否应该提前返回?
这将是非常好的,我现在正在处理一个可以调用window.close()的网站,这会销毁浏览器视图且无法取消(窗口保持打开)。我目前的选择是在客户端JS中替换window.close为一个存根,或者重新创建视图(并重新附加事件)。