我目前正在尝试在我的 Electron 应用程序上实现一个新窗口。 所以我想包含一个按钮,当您单击此按钮时,应该打开一个新窗口。 我在 Electron 文档中没有找到任何内容,也许你们中的一个人可以帮助我。
也许是这样的:
const button = document.getElementById('<your_button_id>');
button.addEventListener('click', () => {
createBrowserWindow();
});
function createBrowserWindow() {
const remote = require('electron').remote;
const BrowserWindow = remote.BrowserWindow;
const win = new BrowserWindow({
height: 600,
width: 800
});
win.loadURL('<url>');
}
我相信被认为正确的答案已经过时了。 我已经成功地使用 ipc 模块 和 Nishkal 给出的解决方案来做到这一点。 请阅读 ipc 模块,我是电子新手,编程经验不是很丰富。我相信您可以提供更好的解决方案。 我添加的代码是为了让它工作:
我的main.js
const {app, BrowserWindow} = require('electron');
const path = require('path');
//ipc
const { ipcMain } = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
createWindow();
})
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
},
});
win.loadFile('index.html');
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
})
我的 preload.js
window.addEventListener('DOMContentLoaded', () => {
const { ipcRenderer } = require('electron')
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg) // prints "pong"
})
//button and its event listener
const b1 = document.getElementById('b1');
b1.addEventListener('click', () => {
ipcRenderer.send('asynchronous-message', 'ping')
})
})
要从渲染器打开窗口:
window.open("https://github.com", "_blank", "top=500,left=200,frame=false,nodeIntegration=no");