导入electron.remote后,remote为undefined


  1. electron 10remote默认关闭,需要手动开启

找到项目中的 BrowserWindow 定义部分,手动设置 webPreferences 中的enableRemoteModuletrue即可,添加部分如下:

win = new BrowserWindow({
    webPreferences: {
        nodeIntegration: true, // 赋予此窗口页面中的JavaScript访问Node.js环境的能力
        // 在electron 10.0.0之后,remote模块默认关闭
        // 必须手动设置webPreferences中的enableRemoteModule为true之后才能使用
        enableRemoteModule: true, // 打开remote模块
    }
});
  1. electron 12版本已被弃用,在14版本移除

    官网:Removed: remote module

    The remote module was deprecated in Electron 12, and will be removed in Electron 14. It is replaced by the @electron/remote module.

解决办法:

(1). 先安装@electron/remote包

npm i -D @electron/remote

(2). 主进程js文件中

// 在 new BrowserWindow  webPreferences里添加 enableRemoteModule: true
app.on('ready',function(){
    require('@electron/remote/main').initialize()
})
//或者是
const createWindow = () => {
    // Create the browser window.
    mainWindow = new BrowserWindow({
        width: 1200,
        height: 600,
        webPreferences: {
            /*
                __dirname 字符串指向当前正在执行脚本的路径 (在本例中,它指向你的项目的根文件夹)。
                path.join API 将多个路径联结在一起,创建一个跨平台的路径字符串。
            */ 
            preload: path.join(__dirname, 'preload.js'),
            enableRemoteModule: true,//必须项,不写无法获取,
        }
    })
    require('@electron/remote/main').initialize()
    require("@electron/remote/main").enable(mainWindow.webContents)//非必需
}

(3). 渲染进程中

// 14版本以下使用如下
const { BrowserWindow } = require('@electron/remote') //这样来引入remote
//如果14版本以上还是无效,可用下面的试试
const { BrowserWindow } = require('@electron/remote/main')
console.log(BrowserWindow) //ƒ BrowserWindow() { [native code] }

文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录