- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下是 Electron 文档特定部分的链接:
(编辑)我正在考虑的用例是,例如,如果我想构建一个浏览器,选项卡中的每个网页都是 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/
我有一个包含 1+N 个线程和 N 个 FIFO 队列的程序,例如:FIFO_queue_t* fifo_queque[N]。一个线程负责填充这 N 个 FIFO 队列。并且其他每个线程都与 1 个
我正在使用 Wise Installer Editor 编写 .msi,并且我想将所有文件复制到注册表项中指定的目录中。 我如何在 Wise 中指定这一点? 提前致谢, 埃内斯托 最佳答案 您可以尝试
我们有一个场景,其中我们尝试获取附加的磁盘虚拟机以及分配给这些磁盘的相应总空间。是否有任何命令或脚本可以获取详细信息? 我已使用命令 Get-AzureDisk 获取输出,但它没有显示列表中的所有虚拟
我有一个包含多个派生类的类,每个派生类都有自己的构造函数。 class A { public: static A *create_new_A(int child_ID);
我有一个小问题:) 我计划建立一个相当不寻常的 web 项目,大约有 1000 个页面,其中不会有经典的导航(仅适用于关于页面和联系人),并且所有页面都不会链接到一个又一个。 它的索引 > 打开随机页
我们的应用程序中有一些数据。有时它会被保存,所以我们为它做了一个实体和一个 NSManagedObject 子类。但是,通常情况下,对象将被实例化并且永远不会保存。我正在考虑使用另一个具有 NSInM
假设我有一个表如下: Class | Subject | Student | Marks ---------------------------------------- 1
刚刚在我正在编写的一些代码中偶然发现了这种情况,并且很好奇“正确”的方法是什么。举例来说,我有一大堆对象,我需要按某个属性对其进行分组,但组的顺序很重要。 例如。对象: var obj = {
如何在 Android 应用 Activity 中启用 Mutli 窗口选项? 我尝试在两个单独的 Activity 中使用 AndroidManifest Activity 属性 android:r
我发现 ear 插件覆盖了 war 插件并阻止调用 war 任务。我通过直接调用它来绕过它。 这是远程明智的还是我应该放弃并转向 eclipse 和 gradle 中的多项目设置? ear {
我们的安装程序是用 Inno Setup 编写的,我们实际上对它非常满意。然而,一些客户不断要求他们可以更轻松地通过 Active Directory 分发 MSI 安装程序。通过扩展 Inno Se
我正在尝试使用 Visual Studio 2017 (v15.4.5) 将现有的 WCF Web API(针对 .NET Framework 4.6.1)移植到 ASP.Net Core 2,但在找
我是一名优秀的程序员,十分优秀!