- electron版本: 13.6.9
- 遇到问题: 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;
- 网上搜索后解决思路: 通过IPC向主进程发送消息,主进程对应回调函数中创建新窗口
- 也可以考虑安装@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>