gpt4 book ai didi

electron - Electron -如何复制BrowserWindow?

转载 作者:行者123 更新时间:2023-12-03 12:32:13 25 4
gpt4 key购买 nike

我正在尝试让动态窗口系统在我的应用程序中正常工作。这与您打开两个浏览器并且想要通过拖放将一个标签移动到chrome的另一实例时Google Chrome的操作非常相似。
我可能可以监听拖动的事件以获取选项卡的DOM引用,将其状态/路由复制到前端应用程序中,将其传递到辅助BrowserWindow,然后将选项卡实例重新创建到另一个BrowserWindow。但是,我将放松第一个选项卡的当前修改。在chrome中,当您移动标签页时,不会丢失标签页中加载的内容。
我真的找不到一种方法来复制BrowserWindow的内容,共享/移动DOM的内容而又不丢失其状态,或者我的Tab实例具有一些繁重的构造逻辑以防止丢失任何内容。
如果您对如何实现这样的目标有指导,那么我会有些迷茫。谢谢你。

最佳答案

我终于找到了实现这一目标的方法。
BrowserWindow可以具有附加的BrowserView。
因此,当我创建一个BrowserWindow时,我传递了一个类似的附加参数:

var win = new BrowserWindow({
webPreferences:{
additionalArguments: ['mainbrowserwindow']
}
})

//Then I load my index.html file for this BrowserWindow
win.loadFile('/path/to/index.html');
这将告诉我的前端,该实例是由“主窗口” View 生成的。这样,我可以为应用程序的每个部分使用单个index.html文件。我只需要基于此其他参数的一些路由即可。
之后,我创建了一个新的BrowserView,然后传递了另一个参数来告诉它加载我的应用程序的特定页面(比如说一个用户信息标签)。
var view = new BrowserView({
webPreferences: {
additionalArguments:['page=userinfo']
}
})

//Then I load the same index.html for this view
view.loadFile('/path/to/index.html')
最后,我将BrowserView添加到BrowserWindow
win.setBrowserView(view)
在我的前端,路由“mainbrowserwindow”将仅生成我的应用程序的选项卡。 “userinfo”路由是选项卡的内容。
现在,我可以创建另一个BrowserWindow,并使用相同的命令将其填充到“userinfo” View 中。
win2.setBrowserView(view)
这会将第一个userinfo页面移至另一个浏览器窗口,而不会丢失内存中的数据。
从理论上讲,这应该起作用。但是显然还有很多事情要做(IPC通信在多个BrowserWindow之间同步选项卡,请确保不存在空选项卡,完全销毁一个选项卡以避免内存泄漏)。而且,当然,该应用程序将在内存中呈现并保存很多页面,而且我认为不可能在文件内序列化BrowserView。

关于electron - Electron -如何复制BrowserWindow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65854643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com