Javascript BrowserWindow和<;网络视图>;电子标签,何时建议使用?

Javascript BrowserWindow和<;网络视图>;电子标签,何时建议使用?,javascript,electron,Javascript,Electron,以下是电子文档特定部分的链接: (编辑) 我考虑的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页是Webview还是BrowserWindow的实例?或者,例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示呈现的HTML页面,这是一个新的浏览器窗口还是一个网络视图?鉴于它们的相似性,我可以理解为什么会混淆在哪一个页面上托管您的内容。它们都从不同的过程开始,并且有许多相似的配置。BrowserWindow和webview之间的关键区别在于,BrowserWindow是平台上的一

以下是电子文档特定部分的链接:

(编辑)
我考虑的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页是Webview还是BrowserWindow的实例?或者,例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示呈现的HTML页面,这是一个新的浏览器窗口还是一个网络视图?

鉴于它们的相似性,我可以理解为什么会混淆在哪一个页面上托管您的内容。它们都从不同的过程开始,并且有许多相似的配置。BrowserWindow和webview之间的关键区别在于,BrowserWindow是平台上的一个窗口,而webview是网页上的一个元素。这可能有点明显、肤浅的区别,但它们的许多差异和用法都源于此

webview存在的主要原因是允许在应用程序中嵌入不受信任的内容。如果您阅读了webview的用例,其中很多都指向这样一个事实:默认情况下,BrowserWindow可以完全访问节点API。在it中托管不受信任的内容会使这些内容对您的系统具有重要的访问权限,并带来安全问题。但是,webview在默认情况下没有启用节点集成,因此它会屏蔽您的应用程序和平台,使其不受托管内容的影响

但是,这种区别有点像是在转移视线,因为节点集成可以在BrowserWindow上禁用,也可以在webview元素上启用。也就是说,您应该能够在浏览器窗口中安全地托管不受信任的内容,方法是取消对节点的访问,并在webview中托管受信任的内容,并提供对节点的访问

webview的关键在于它允许在应用程序的网页/视图中嵌入不受信任的内容。如果在同一视图/页面中,您希望某些内容受信任,可以完全访问节点API,而某些内容不受信任,并且对节点API的访问受到限制或没有访问权,那么这只能通过webview元素来实现。这是一种隔离和锁定浏览器窗口中托管的网页的一部分,同时允许其其余部分打开的方法

除了嵌入不受信任的内容外,我能想到的在BrowserWindows上使用WebView的唯一其他情况是,如果您想在一个窗口中打开并查看多个单独的进程。一个应用程序可以选择为10个不同的进程创建10个不同的窗口,并让平台处理布局、焦点等,或者它可以为10个不同的进程打开一个包含10个Web视图的窗口,并在该窗口内处理布局、焦点等

(编辑)要对问题进行编辑,请执行以下操作:

对于这两种情况,我建议使用webview

在第一个场景(浏览器)中,您提到了“选项卡”。据我所知,没有简单的跨平台方法可以使用多个BrowserWindows构建选项卡式应用程序,因为这些窗口是由本机操作系统创建的。但是,您可以通过在单个网页中创建一个选项卡式应用程序来实现这一点,每个选项卡包含一个webview。在这种情况下,您需要确保在webview上禁用节点集成(默认情况下应该是这样),因为从web加载内容通常是不可信的


第二个场景是带有呈现HTML的编辑器,它没有那么清晰。您可以使用webview、iframe或将内容直接呈现给div。直接呈现给div可能是标记或HTML小片段的最佳选择,只要您不需要自定义css或不想执行JavaScript。否则,使用webview或iframe是有意义的。不同之处在于webview在单独的进程中启动,可能具有节点集成或灵活的安全性,而iframe在与BrowserWindow相同的进程中加载,并且我认为已经锁定了安全性。无论如何,要在没有其他窗口的情况下获得并排的外观,您需要使用类似webview的HTML元素,而不是BrowserWindow。

Electron 5建议使用browserview/iframe而不是webview。

你想实现什么目标?浏览器窗口和浏览器非常不同,这使得这个问题很难回答。如果你加上你想做的事情,我也许能帮上忙。谢谢你的回答!肯定澄清了我的很多困惑。还有一个后续问题(我也会对原始问题进行编辑),但如果我想在我的electron应用程序中显示网页(类似于文本编辑器,它显示您正在构建的内容的呈现HTML),我会使用webview显示该页面吗?我编辑了答案。让我知道这是否合理,或者我是否需要进一步扩展:-)谢谢shawn!很有道理我只是有个问题。我必须在我的应用程序中绕过代理。如果我将代理绕过规则应用于浏览器窗口(浏览器窗口正在加载一个包含webview的HTML文件,webview正在加载我的url),br是否足够,或者我也必须为webview应用代理绕过规则?如果我必须为webview再做一次,怎么做?@ShawnRakowski为了让更多最近的观众了解这个问题,可能值得一提的是BrowserView,它是webview的一种替代方案,记录在这里: