gpt4 book ai didi

javascript - Electron 中的 BrowserWindow 和 标签有什么区别,什么时候使用它们是明智的?

转载 作者:可可西里 更新时间:2023-11-01 02:35:35 29 4
gpt4 key购买 nike

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

Browser Window

Webview Tag

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

最佳答案

我能理解为什么在考虑到它们的相似性时,为什么要托管您的内容会让人感到困惑。它们都在不同的进程中启动,并且有许多相似的配置。 BrowserWindow 和 webview 之间的主要区别在于 BrowserWindow 是平台上的一个窗口,而 webview 是一个元素 在网页上 这可能有点明显、表面上的区别,但它们的许多差异和用法都源于此。

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

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

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

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

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

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

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

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

关于javascript - Electron 中的 BrowserWindow 和 <Webview> 标签有什么区别,什么时候使用它们是明智的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602759/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com