在 Electron 中创建新的浏览器窗口时将 node-integration 设置为 false 的结果是啥?
Posted
技术标签:
【中文标题】在 Electron 中创建新的浏览器窗口时将 node-integration 设置为 false 的结果是啥?【英文标题】:What's the outcome of setting node-integration to false when creating a new browser window in Electron?在 Electron 中创建新的浏览器窗口时将 node-integration 设置为 false 的结果是什么? 【发布时间】:2015-07-03 19:30:26 【问题描述】:为了让 jQuery 在我在 Electron(以前称为 Atom Shell)中打开的 html 页面中正确加载和运行,在我的 main.js
文件中创建 BrowserWindow
时,我必须禁用 Node 集成。
谁能告诉我node-integration: false
的哪些设置会阻止我执行如果我没有禁用它通常可以执行的操作?
【问题讨论】:
【参考方案1】:将 node-integration 设置为 false 将禁用渲染器进程中的 node.js - 即您的应用程序可以仅执行 Web 浏览器将执行的操作。不要这样做,而是使用与 Electron 兼容并具有相同 API 的 Zepto.js。
【讨论】:
感谢保罗的回答。不幸的是,我当时不能使用 Zepto.js,因为 Twitter Bootstrap 不完全兼容它(至少直到 v4)。我认为您的回答是指在网页中执行var ipc = require('ipc')
之类的操作将不再适用于 node-integration: false
,对吗?
正确,涉及require
的所有内容都已排除在外。 jQuery 可能很容易修补以开始工作,我会这样做。这在 Electron 中很常见,JS 开发者习惯于“要么 DOM or require”,而 Electron 是一个 DOM 环境 with require,让很多库感到困惑。不过,它通常是 1-2 行修复。
作为 node 和 Electron 的新手,我不确定“渲染器进程中的 node.js”是什么意思,也没有在 Electron 文档中找到任何解释它的内容。你的意思是可用的电子模块,如模块electron
将不可用?在这种情况下,如何与主进程对话?
如果您加载任何动态内容或呈现用户提供的任何内容,这是非常糟糕的建议。在这些情况下,您绝对应该禁用节点集成,否则 XSS 漏洞将使攻击者几乎可以在您的计算机上执行任何操作..
@EricMajerus 这意味着您可以例如导入 fs.readFileSync
并从渲染器进程实际读取本地驱动器上的文件内容。多么酷啊?但我也想知道性能影响,有没有@PaulBetts?以上是关于在 Electron 中创建新的浏览器窗口时将 node-integration 设置为 false 的结果是啥?的主要内容,如果未能解决你的问题,请参考以下文章