介绍

主线程 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;
// 执行与渲染进程交互的操作
});

权限说明

以下是 nodeIntegrationcontextIsolation 两个参数的所有组合场景、功能限制及安全说明的汇总表,清晰展示不同配置下的特性:

组合场景nodeIntegrationcontextIsolation核心功能与限制安全性适用场景
1falsetrue(默认)- 渲染层无 Node.js 权限(不能用 require
- preload.js 运行在隔离上下文,仅能通过 contextBridge 暴露 API
- 前端 JS 与 preload.js 完全隔离,变量不共享
- 支持 ipcRenderer(需通过 contextBridge 暴露)
最高加载第三方网页、公共内容,或对安全性要求极高的场景(推荐默认配置)
2falsefalse- 渲染层无 Node.js 权限
- preload.js 与前端 JS 共享上下文(可直接操作 window
- preload.js 可访问 Node.js 模块(如 netfs
- 前端 JS 可直接调用 preload.js 暴露的 Node.js 方法
仅加载可信本地页面,需要 preload.js 直接操作 DOM 且无需渲染层 Node 权限
3truetrue- 渲染层有 Node.js 权限(可直接 require 模块)
- preload.js 运行在隔离上下文,与渲染层隔离
- 前端 JS 可直接使用 Node.js 模块(如 fs.readFile
极少用(开启 nodeIntegration 但隔离上下文,意义有限)
4truefalse- 渲染层有完全 Node.js 权限(危险!)
- preload.js 与前端 JS 共享上下文
- 前端 JS 可直接调用所有 Node.js API(如删除文件、启动进程)
最低仅本地可信应用,且明确知晓风险(强烈不推荐,易受 XSS 攻击)

关键说明:

  1. nodeIntegration:控制渲染层是否能直接访问 Node.js 模块(如 fsnet)。

    • true:渲染层可直接用 require('fs'),风险极高(恶意脚本可操作本地文件)。
    • false:渲染层无 Node.js 权限,需通过 preload.js 中转。
  2. contextIsolation:控制 preload.js 与渲染层是否共享上下文。

    • truepreload.js 运行在独立沙箱,变量/对象不共享,需通过 contextBridge.exposeInMainWorld 暴露 API(安全)。
    • falsepreload.js 与前端 JS 共享 window 等对象,可直接修改 DOM 或全局变量(但存在安全风险)。
  3. preload.js 在各组合中的权限

    • 无论 nodeIntegration 如何设置,preload.js 始终能访问 Node.js 模块(除非开启 sandbox: true)。
    • 仅当 contextIsolation: false 时,preload.js 才能直接操作渲染层的 window 或 DOM。
  4. 安全优先级
    组合 1(false + true)是 Electron 推荐的安全配置,几乎所有场景都应优先使用,仅在明确需要降低安全限制时才考虑其他组合。

通过此表可快速判断不同配置的适用场景及风险,建议始终以「最小权限原则」配置参数,避免不必要的安全隐患。