打开新窗口 - Electron

问题描述 投票:0回答:3

我目前正在尝试在我的 Electron 应用程序上实现一个新窗口。 所以我想包含一个按钮,当您单击此按钮时,应该打开一个新窗口。 我在 Electron 文档中没有找到任何内容,也许你们中的一个人可以帮助我。

electron
3个回答
18
投票

也许是这样的:

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>');
}

4
投票

我相信被认为正确的答案已经过时了。 我已经成功地使用 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')
        })
      })

0
投票

要从渲染器打开窗口:

window.open("https://github.com", "_blank", "top=500,left=200,frame=false,nodeIntegration=no");

https://www.electronjs.org/docs/latest/api/window-open

© www.soinside.com 2019 - 2024. All rights reserved.