electron使用remote报错:Uncaught TypeError: Cannot read property ‘BrowserWindow‘ of undefined

在使用 Electron 开发过程中,遇到新版本废弃 remote 模块的问题,通过安装 @electron/remote 替代模块并初始化,修改主进程和渲染进程的配置,成功解决 UncaughtTypeError 和 enableRemoteModule 问题。详细步骤包括安装新模块、在主进程和渲染进程中启用远程模块,以及更新代码以避免错误。
摘要由CSDN通过智能技术生成

1、场景

在学习electron,父窗口打开子窗口,使用remote模块的时候,出现了以下的问题:

const BrowserWindow = require('electron').remote.BrowserWindow

ctrl+shift+i快捷键打开右边调试模式窗口。

2、报错

Uncaught TypeError: Cannot read property 'BrowserWindow' of undefined

 3、原因分析


1、新安装的electron,版本都是14+的版本,像我下载的都是16+的版本。但是14+的版本, electron团队在electron12的时候废弃了remote模块,更是在14后移除了这个模块 需要自行下载 remote包。由@electron/remote模块替代。

2、electron10中,enableRemoteModule默认值改为了false,使用remote模块需要改为true,同时contextIsolation设置为false。

4、解决方案

1、首先在自己项目中npm安装 @electron/remote模块

        

npm install --save @electron/remote

2、在主进程初始化@electron/remote模块,然后在渲染中使用

require('@electron/remote/main').initialize()

 3、在主进程main.js中,设置remote模块,在webPreferences中添加enableRemoteModule:true 和 contextIsolation为false。

webPreferences:{ 
    nodeIntegration:true,
    enableRemoteModule: true,
    contextIsolation: false
}

4、渲染进程中,require('electron').remote替换为require('@electron/remote')

const BrowserWindow = require('@electron/remote').BrowserWindow

注意: 如果还报下面的错:

require("@electron/remote/main").enable(webContents) to enable it.

 就在步骤2加上:
require('@electron/remote/main').initialize()的后面加上require('@electron/remote/main').enable(mainWindow.webContents)

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

 5、代码

主进程main.js:

var electron = require('electron')

var app = electron.app // 引用app
var BrowserWindow = electron.BrowserWindow // 窗口引用

var mainWindow = null //声明要打开的主窗口

app.on('ready',()=>{
    mainWindow = new BrowserWindow({
        width:500,
        height:500,
        webPreferences:{ 
            nodeIntegration:true,
            enableRemoteModule: true,
            contextIsolation: false
        }
    })
    require('@electron/remote/main').initialize()
    require('@electron/remote/main').enable(mainWindow.webContents)
    mainWindow.loadFile('demo2.html') // 加载html
    mainWindow.on('closed',()=>{
        mainWindow = null
    })
})

渲染进程demo2.js:

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

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

        newWin.loadFile('yellow.html')
        newWin.on('close',()=>{
            newWin = null
        })
    }
}

6、效果

7、推荐

 推荐几个学习网站:

  1. electron中文文档
  2. electron文档中心
  3. 技术胖Electron 免费视频教程
  4. electron码云开源项目
  5. 一个基于 electron-vue 开发的音乐播放器
  6. 分类 Electron 下的文章

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值