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

Ziy*_*ekh 11 javascript electron

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

浏览器窗口

Webview标签

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

Sha*_*ski 17

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

Webview存在的大部分原因是允许将不受信任的内容嵌入到您的应用程序中.如果您在使用案例的WebView读了起来,他们中的很多指向一个事实,即BrowserWindow,默认情况下,具有对节点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.直接渲染到一个div可能是类似降价或HTML的小片段最好的选择,只要你不需要自定义CSS或要执行JavaScript.否则使用webview或iframe是有意义的.不同之处在于webview在一个单独的进程中启动,并且可能具有Node集成或flexed安全性,而iframe在与BrowserWindow相同的进程中加载​​,并且我认为已经锁定了安全性.无论如何,要在没有其他窗口的情况下并排显示,您需要使用HTML元素,如webview而不是BrowserWindow.

  • @ShawnRakowski为这个问题的新近浏览者带来了好处,值得一提的是BrowserView,它是WebView的替代品,记录在这里:https://electronjs.org/docs/api/browser-view (2认同)