electron 使用remote 报错:Cannot read properties of undefined (reading ‘BrowserWindow‘)

最近在学习electron,写了一个remote的小demo,其中有这样一段代码:

const BrowserWindow = require("electron").remote.BrowserWindow;

会报错,如下图:

 

然后去网上找了一些文章看了看貌似是版本的问题,我用的electron是@v16.0.4, 而remote在electron12的时候废弃了remote模块,所以需要我们自己安装remote包。

1.  首先在项目根目录下安装@electron/remote包:

npm install @electron/remote --save

2. 在主进程中进行初始化:

require("@electron/remote/main").initialize();
require("@electron/remote/main").enable(mainWindow.webContents);

 3. 并在主进程webPreferences中设置enableRemoteModule和contextIsolation:

 webPreferences: {
    nodeIntegration: true,
    contextIsolation: false,
    enableRemoteModule: true, // 使用remote模块
 },

4. 在渲染进程中设置

const BrowserWindow = require("@electron/remote").BrowserWindow;

就好了,这是我整体的代码:

主进程

var electron = require("electron");
var app = electron.app; // 引用app
var BrowserWindow = electron.BrowserWindow; // 窗口引用
var mainWindow = null; // 申明要打开的主窗口

// 当electron完成了初始化并且准备创建浏览器窗口的时候
// 此方法被调用
app.on("ready", () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 800,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
      enableRemoteModule: true, // 使用remote模块
    },
  });

  require("@electron/remote/main").initialize(); // 初始化
  require("@electron/remote/main").enable(mainWindow.webContents);
  mainWindow.loadFile("demo2.html"); // 加载index.html 页面
  mainWindow.openDevTools(); // 打开开发者工具

  mainWindow.on("closed", () => {
    mainWindow = null;
  });
});

子进程

const btn = this.document.querySelector("#btn");
const BrowserWindow = require("@electron/remote").BrowserWindow;

window.onload = () => {
  btn.onclick = () => {
    newWin = new BrowserWindow({
      width: 500,
      height: 500,
    });

    newWin.loadFile("load.html");
    newWin.on("closed", () => {
      newWin = null;
    });
  };
};

结果展示

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值