电子中的浏览器窗口和标签有什么区别<Webview>,什么时候建议使用它们?



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

浏览器窗口

Webview标签

(编辑)我想的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页都是Webview还是BrowserWindow的实例?或者,例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示渲染的HTML页面,那是一个新的BrowserWindow还是Webview?

鉴于它们的相似性,我可以理解为什么在托管内容时会感到困惑。它们都是在不同的过程中启动的,并且有许多相似的配置。BrowserWindow和webview之间的关键区别在于,BrowserWindow是平台上的窗口,webview是网页上的
元素。这可能有点明显、肤浅的区别,但它们的许多差异和用法都源于此。

Web视图存在的大部分原因是为了允许不受信任的内容嵌入到应用程序中。如果你阅读了webview的用例,其中很多都指向这样一个事实,即默认情况下,BrowserWindow可以完全访问NodeAPI。在其中托管不受信任的内容会使这些内容对您的系统具有重要访问权限,并带来安全问题。但是,默认情况下,webview没有打开节点集成,因此它保护您的应用程序和平台不受托管内容的影响。

然而,这种区别有点转移注意力,因为节点集成可以在BrowserWindow上禁用,也可以在webview元素上启用。也就是说,您应该能够通过取消对Node的访问权限,在Web视图中托管受信任的内容,并为其提供对Node的权限,从而在BrowserWindow中安全地托管不受信任的属性。

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

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

(编辑)解决问题的编辑:

对于这两种情况,我都建议使用网络视图。

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

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

Electron 5建议使用browserview/iframe而不是webview
https://electronjs.org/docs/api/webview-tag

最新更新