electron-BrowserWindow is not a constructor解决

1,434 阅读1分钟
  • electron版本: 13.6.9
  1. 遇到问题: 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;
  2. 网上搜索后解决思路: 通过IPC向主进程发送消息,主进程对应回调函数中创建新窗口
  3. 也可以考虑安装@electron/remote,但官方没推荐,所以倾向用ipc解决; // index.js
var electron = require('electron')
var { ipcMain, webContents } = require('electron')
var app = electron.app
var BrowserWindow = electron.BrowserWindow
var win = null
const createWindow = ()=>{
     win = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        }
    });
    win.loadFile('index.html');
    win.webContents.openDevTools();

}
app.on('ready', () => {
    createWindow()
    // 监听消息
    ipcMain.on('mag_render2main', (event, param1, param2) => {
        console.log(param1+111);
        win.webContents.send('mag_main2render', param1, param2)
        createWindow()
    })

    win.on('close', () => {
        win = null
    })
})
app.on('window-all-closed', () => {
    app.quit()
})

// html 按钮点击发送消息

<body>
    <div style="padding: 60px;font-size:38px;font-weight: bold;text-align: center;">
        Hello World
    </div>
    
    <button id="newWindow">创建窗口</button>
</body>

<script>
    
var { ipcRenderer } = require('electron')
ipcRenderer.on('mag_main2render', (event, param1, param2) => {
    console.log(param1 + '' + 'main');
})
document.querySelector('#newWindow').addEventListener('click', () => {
    console.log('111');
    
    ipcRenderer.send('mag_render2main', { name: 'param1' }, { name: 'param2' })

})
console.log('213');
</script>