电子中的 BrowserWindow 和 <Webview> Tag 有什么区别,什么时候使用它们是明智的?
What is the difference between BrowserWindow and <Webview> Tag in electron and when is it advisable to use each?
以下是电子文档特定部分的链接:
(编辑)
我正在考虑的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页都是 Webview 或 BrowserWindow 的实例吗?或者例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示呈现的 HTML 页面,那是新的 BrowserWindow 还是 Webview?
我能理解为什么在考虑到它们的相似性时,为什么要托管您的内容会让人感到困惑。它们都在不同的进程中启动,并且有许多相似的配置。 BrowserWindow 和 webview 之间的主要区别在于 BrowserWindow 是平台上的 window 而 webview 是 网页上的元素 这可能有点明显,表面上的区别,但它们的许多区别和用法都源于它。
webview 存在的大部分原因是允许将不受信任的内容嵌入到您的应用程序中。如果您阅读了 webview 的用例,其中很多都指向一个事实,即默认情况下,BrowserWindow 具有对 Node API 的完全访问权限。在其中托管不受信任的内容会使该内容对您的系统具有重要的访问权限,并会带来安全问题。但是,webview 没有默认打开 Node 集成,因此它可以保护您的应用程序和平台免受托管内容的影响。
但是,这种区别有点转移注意力,因为节点集成可以在 BrowserWindow 上禁用,但可以在 webview 元素上启用。也就是说,您应该能够通过取消对 Node 的访问权限在 BrowserWindow 中安全地托管不受信任的内容,并在 webview 中托管受信任的内容并为其提供对 Node 的访问权限。
webview 的关键在于它允许在您的应用程序中 嵌入 不受信任的内容 webpage/view。如果在同一个 view/page 中,您想要一些受信任的内容具有对 Node API 的完全访问权限,而一些不受信任的内容对 Node API 的访问权限有限或没有权限,那么这只能通过网络视图元素。这是一种隔离和锁定托管在 BrowserWindow 中的网页的一部分,同时允许其余部分打开的方法。
除了嵌入不受信任的内容之外,我能想到的在 BrowserWindows 上使用 webview 的唯一其他情况是,如果您想在单个 window 中打开和查看多个单独的进程。一个应用程序可以选择为 10 个不同的进程创建 10 个不同的 windows,并让平台处理布局、焦点等,或者它可以打开 1 个 window,为 10 个不同的进程提供 10 个 webview,并处理布局、焦点等 window 本身。
(编辑)解决对问题的编辑:
对于这两种情况,我建议使用网络视图。
在第一个场景中,浏览器,您提到了 "tabs"。据我所知,没有简单的跨平台方法可以使用多个 BrowserWindows 构建选项卡式应用程序,因为 windows 是由本机 OS 创建的。但是,您可以通过在单个网页中创建一个选项卡式应用程序来实现这一点,每个选项卡包含一个 webview。在这种情况下,您需要确保在 webview 上禁用节点集成(默认情况下应该是),因为从网络加载内容通常是不受信任的。
第二种情况,编辑器渲染 HTML,不是那么清晰。您可以使用 webview、iframe 或将内容直接渲染到 div。只要您不需要自定义 css 或不想执行 JavaScript,直接渲染到 div 可能是 Markdown 或 HTML 的小片段的最佳选择。否则使用 webview 或 iframe 是有意义的。不同之处在于 webview 在单独的进程中启动并且可能具有节点集成或灵活的安全性,而 iframe 在与 BrowserWindow 相同的进程中加载并且我认为已经锁定了安全性。无论如何,要在没有另一个 window 的情况下并排查看,您需要使用像 webview 而不是 BrowserWindow 的 HTML 元素。
Electron 5 建议使用 browserview/iframe 而不是 webview。
https://electronjs.org/docs/api/webview-tag
以下是电子文档特定部分的链接:
(编辑) 我正在考虑的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页都是 Webview 或 BrowserWindow 的实例吗?或者例如,如果我想构建一个编程编辑器,并且我想在代码旁边显示呈现的 HTML 页面,那是新的 BrowserWindow 还是 Webview?
我能理解为什么在考虑到它们的相似性时,为什么要托管您的内容会让人感到困惑。它们都在不同的进程中启动,并且有许多相似的配置。 BrowserWindow 和 webview 之间的主要区别在于 BrowserWindow 是平台上的 window 而 webview 是 网页上的元素 这可能有点明显,表面上的区别,但它们的许多区别和用法都源于它。
webview 存在的大部分原因是允许将不受信任的内容嵌入到您的应用程序中。如果您阅读了 webview 的用例,其中很多都指向一个事实,即默认情况下,BrowserWindow 具有对 Node API 的完全访问权限。在其中托管不受信任的内容会使该内容对您的系统具有重要的访问权限,并会带来安全问题。但是,webview 没有默认打开 Node 集成,因此它可以保护您的应用程序和平台免受托管内容的影响。
但是,这种区别有点转移注意力,因为节点集成可以在 BrowserWindow 上禁用,但可以在 webview 元素上启用。也就是说,您应该能够通过取消对 Node 的访问权限在 BrowserWindow 中安全地托管不受信任的内容,并在 webview 中托管受信任的内容并为其提供对 Node 的访问权限。
webview 的关键在于它允许在您的应用程序中 嵌入 不受信任的内容 webpage/view。如果在同一个 view/page 中,您想要一些受信任的内容具有对 Node API 的完全访问权限,而一些不受信任的内容对 Node API 的访问权限有限或没有权限,那么这只能通过网络视图元素。这是一种隔离和锁定托管在 BrowserWindow 中的网页的一部分,同时允许其余部分打开的方法。
除了嵌入不受信任的内容之外,我能想到的在 BrowserWindows 上使用 webview 的唯一其他情况是,如果您想在单个 window 中打开和查看多个单独的进程。一个应用程序可以选择为 10 个不同的进程创建 10 个不同的 windows,并让平台处理布局、焦点等,或者它可以打开 1 个 window,为 10 个不同的进程提供 10 个 webview,并处理布局、焦点等 window 本身。
(编辑)解决对问题的编辑:
对于这两种情况,我建议使用网络视图。
在第一个场景中,浏览器,您提到了 "tabs"。据我所知,没有简单的跨平台方法可以使用多个 BrowserWindows 构建选项卡式应用程序,因为 windows 是由本机 OS 创建的。但是,您可以通过在单个网页中创建一个选项卡式应用程序来实现这一点,每个选项卡包含一个 webview。在这种情况下,您需要确保在 webview 上禁用节点集成(默认情况下应该是),因为从网络加载内容通常是不受信任的。
第二种情况,编辑器渲染 HTML,不是那么清晰。您可以使用 webview、iframe 或将内容直接渲染到 div。只要您不需要自定义 css 或不想执行 JavaScript,直接渲染到 div 可能是 Markdown 或 HTML 的小片段的最佳选择。否则使用 webview 或 iframe 是有意义的。不同之处在于 webview 在单独的进程中启动并且可能具有节点集成或灵活的安全性,而 iframe 在与 BrowserWindow 相同的进程中加载并且我认为已经锁定了安全性。无论如何,要在没有另一个 window 的情况下并排查看,您需要使用像 webview 而不是 BrowserWindow 的 HTML 元素。
Electron 5 建议使用 browserview/iframe 而不是 webview。
https://electronjs.org/docs/api/webview-tag