BrowserWindow和<webview>标签在电子中的区别是什么?建议何时使用它们?

时间:2016-06-02 21:50:48

标签: javascript electron

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

Browser Window

Webview Tag

(编辑) 我想要的用例是,例如,如果我想构建一个浏览器,标签中的每个网页都是Webview或BrowserWindow的实例吗?或者,例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示呈现的HTML页面,那么它是一个新的BrowserWindow还是Webview?

2 个答案:

答案 0 :(得分:16)

我能理解为什么在这些内容相似的情况下,将这些内容托管在哪些内容会令人困惑。它们都从单独的进程开始,并具有许多类似的配置。 BrowserWindow和webview之间的主要区别在于BrowserWindow是平台上的 窗口 ,而webview是 元素 < / strong>在网页上这可能是一个明显的,肤浅的区别,但他们的差异和用法很大程度上源于它。

Webview存在的大部分原因是允许将不受信任的内容嵌入到您的应用程序中。如果您阅读了webview的用例,其中很多都指出BrowserWindow默认情况下可以完全访问Node API。在其中托管不受信任的内容正在将该内容交付给您的系统,并引起安全问题。但是,webview默认情况下没有启用节点集成,因此它可以保护您的应用程序和平台免受托管内容的影响。

然而,这种区别有点像红色鲱鱼,因为可以在BrowserWindow上禁用节点集成,并且可以在webview元素上启用。也就是说,您应该能够安全地在BrowserWindow中托管不受信任的内容,方法是取消对网络视图中节点和托管可信内容的访问权限,并为其提供对节点的访问权。

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

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

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

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

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

第二个场景,一个带有渲染HTML的编辑器,并不是那么明确。您可以使用webview,iframe或直接将内容呈现给div。只要您不需要自定义CSS或想要执行JavaScript,直接渲染到div可能是Markdown或HTML小片段的最佳选择。否则使用webview或iframe是有意义的。不同之处在于webview在一个单独的进程中启动,并且可能具有Node集成或flexed安全性,而iframe在与BrowserWindow相同的进程中加载​​,并且我认为已经锁定了安全性。无论如何,要在没有其他窗口的情况下并排显示,您需要使用HTML元素,如webview而不是BrowserWindow。

答案 1 :(得分:2)

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