介绍
主线程 index.js 和渲染进程 index.html里面的js是可以相互访问的
remote 模块 index.html 访问index.js
if (window.require) {
const {
remote
} = require('electron');
const BrowserWindow = remote.BrowserWindow;
// 获取当前窗口的 WebContents
const webContents = remote.getCurrentWebContents();
webContents.openDevTools();
}
注入 index.js 注入代码 访问index.html
主线程访问渲染线程,注入代码
mainWindow.webContents.on('did-finish-load', () => {
const scriptContent = `
// 给每个页面注入的代码
window.sayHello = () => alert('Hello from injected script!');
`;
mainWindow.webContents.executeJavaScript(scriptContent);
mainWindow.show();
});
主线程获取所有渲染线程
// 主进程代码(main.js)
const { BrowserWindow } = require('electron');
// 获取所有打开的窗口
const allWindows = BrowserWindow.getAllWindows();
allWindows.forEach(window => {
console.log(窗口ID: ${window.id}, 标题: ${window.getTitle()});
// 获取对应的webContents(渲染进程)
const webContents = window.webContents;
// 执行与渲染进程交互的操作
});
权限说明
以下是 nodeIntegration 和 contextIsolation 两个参数的所有组合场景、功能限制及安全说明的汇总表,清晰展示不同配置下的特性:
| 组合场景 | nodeIntegration | contextIsolation | 核心功能与限制 | 安全性 | 适用场景 |
|---|---|---|---|---|---|
| 1 | false | true(默认) | - 渲染层无 Node.js 权限(不能用 require)- preload.js 运行在隔离上下文,仅能通过 contextBridge 暴露 API- 前端 JS 与 preload.js 完全隔离,变量不共享- 支持 ipcRenderer(需通过 contextBridge 暴露) | 最高 | 加载第三方网页、公共内容,或对安全性要求极高的场景(推荐默认配置) |
| 2 | false | false | - 渲染层无 Node.js 权限 - preload.js 与前端 JS 共享上下文(可直接操作 window)- preload.js 可访问 Node.js 模块(如 net、fs)- 前端 JS 可直接调用 preload.js 暴露的 Node.js 方法 | 中 | 仅加载可信本地页面,需要 preload.js 直接操作 DOM 且无需渲染层 Node 权限 |
| 3 | true | true | - 渲染层有 Node.js 权限(可直接 require 模块)- preload.js 运行在隔离上下文,与渲染层隔离- 前端 JS 可直接使用 Node.js 模块(如 fs.readFile) | 低 | 极少用(开启 nodeIntegration 但隔离上下文,意义有限) |
| 4 | true | false | - 渲染层有完全 Node.js 权限(危险!) - preload.js 与前端 JS 共享上下文- 前端 JS 可直接调用所有 Node.js API(如删除文件、启动进程) | 最低 | 仅本地可信应用,且明确知晓风险(强烈不推荐,易受 XSS 攻击) |
关键说明:
nodeIntegration:控制渲染层是否能直接访问 Node.js 模块(如fs、net)。true:渲染层可直接用require('fs'),风险极高(恶意脚本可操作本地文件)。false:渲染层无 Node.js 权限,需通过preload.js中转。
contextIsolation:控制preload.js与渲染层是否共享上下文。true:preload.js运行在独立沙箱,变量/对象不共享,需通过contextBridge.exposeInMainWorld暴露 API(安全)。false:preload.js与前端 JS 共享window等对象,可直接修改 DOM 或全局变量(但存在安全风险)。
preload.js在各组合中的权限:- 无论
nodeIntegration如何设置,preload.js始终能访问 Node.js 模块(除非开启sandbox: true)。 - 仅当
contextIsolation: false时,preload.js才能直接操作渲染层的window或 DOM。
- 无论
- 安全优先级:
组合 1(false+true)是 Electron 推荐的安全配置,几乎所有场景都应优先使用,仅在明确需要降低安全限制时才考虑其他组合。
通过此表可快速判断不同配置的适用场景及风险,建议始终以「最小权限原则」配置参数,避免不必要的安全隐患。
最后一次更新于2025-10-20


