一个多星期前,我在 Atom 论坛(下面的链接)上问了这个问题,但没有收到回复,所以我在这里重新发布,希望有人能够提供有关我的问题的见解。
最近,我参与了一个使用 Electron 作为前端的开源项目。这个项目有两个要求:它必须是跨平台的,它必须有一个嵌入式 Web 浏览器(它应该能够像典型的浏览器一样浏览 Web 和呈现内容)。考虑到 Electron 已经连接了我的应用程序的相当大的足迹,尝试在它旁边使用另一个嵌入式 Web 框架似乎是一个坏主意。因此,为了简化我的项目并保留基于 Electron 构建的 UI,我正在考虑使用 Electron 本身作为 Web 浏览器。这就是我遇到问题的地方。
在 Electron 文档的安全页面中,明确指出,
重要的是要了解……Electron 不是网络浏览器
这句话来自于 Electron——或者更确切地说是在它上面运行的代码——具有与用户操作系统交互的独特能力,这与典型的 Web 应用程序不同。页面继续说,
显示来自不受信任来源的任意内容会带来严重的安全风险,Electron 不打算处理
在这一点上,我很想放弃使用 Electron 作为内置浏览器的想法,但在同一页面的进一步下方,您可以找到另一个非常有趣的花絮:
要显示远程内容,请使用
<webview>标记或BrowserView,[和] 确保禁用nodeIntegration和启用contextIsolation
链接:https : //electronjs.org/docs/tutorial/security#isolation-for-untrusted-content
首先,关于使用 webviews,Electron 自己的文档建议完全避免它们:
Electron 的
webview标签基于 Chromium 的webview,它正在经历巨大的架构变化。这会影响 的稳定性webviews,包括渲染、导航和事件路由。我们目前建议不要使用该webview标签并考虑替代方案,例如iframe、ElectronBrowserView或完全避免嵌入内容的架构。
链接:https : //electronjs.org/docs/api/webview-tag
似乎我无法避免嵌入内容,我选择研究使用 BrowserView,但我发现也不是很有动力。就目前而言,建议是做两件事:
nodeIntegrationcontextIsolation在查看安全和最佳实践页面后,我还将附加以下步骤: