如何使用新的 html 文件打开更新电子浏览器窗口

anj*_*juc 4 html javascript electron

我是电子新手。我有两个 html 页面,我想在单击按钮时打开第二个页面。我的代码如下,但我只是得到一个空白窗口;不是第二页。

这是index.js

const electron = require('electron')
const {app, BrowserWindow} = electron

app.on('ready',()=>{
  let win = new BrowserWindow({width:960, hehight:540})
  win.loadURL(`file://${__dirname}/login.html`)
})

exports.openWindow = (fileName) => {
  let win = new BrowserWindow({width:960, height:540})
  win.loadURL(`file://${__dirname}/` + fileName + `.html`)
}
Run Code Online (Sandbox Code Playgroud)

这是登录.js

const remote = require('electron').remote
const index = remote.require('./index.js')

var login = document.getElementById('login')
login.addEventListner('click', () => {
  var window = remote.getCurrentWindow()
  index.openWindow('pageTwo')
  window.close()
}, false)
Run Code Online (Sandbox Code Playgroud)

Login 是 html 按钮的 id。

我想要第二页。我该如何执行此操作?

小智 6

您可以通过使用 IPCRenderer 和 IPCMain 轻松实现此目的,以便在主进程和渲染器之间传递消息。

索引.js

const electron = require('electron')
const {app, BrowserWindow, ipcMain} = electron

app.on('ready',()=>{
  let win = new BrowserWindow({width:960, hehight:540})
  win.loadURL(`file://${__dirname}/login.html`)
})

ipcMain.on('open-new-window', (event, fileName) => {
  let win = new BrowserWindow({width:960, height:540})
  win.loadURL(`file://${__dirname}/` + fileName + `.html`)
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我更改了代码只是为了添加ipcMain和接收来自渲染器的消息。

登录.js

const {ipcRenderer} = require('electron');

let login = document.getElementById('login');
login.addEventListner('click', () => {
  ipcRenderer.send('open-new-window', 'pageTwo');
}, false);
Run Code Online (Sandbox Code Playgroud)

对于 login.js 和ipcRenderer.

该文档比我解释得更好,可以在此处找到 ipcMain在此处找到 ipcRenderer


小智 5

我查看了您的代码,从我看来您需要主进程,您不能这样做,您需要使用IPC从渲染进程发送消息或使用远程BrowserWindow对象并从ID 并使用 loadURL。

使用工控机

索引.js

const { ipcMain } = require("electron");

ipcMain.on("changeWindow", function(event, arg) {
    switch (arg) {
        case "page1":
            win.loadURL("Page1 URL");
            break;
        case "page2":
            win.loadURL("Page2 URL");
            break;
        case "page3":
            win.loadURL("Page3 URL");
            break;
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

登录.js

const { ipcRenderer } = require("electron");

function onButtonClick() {
    ipcRenderer.send("changeWindow", "page2");
}
Run Code Online (Sandbox Code Playgroud)

远程使用 BrowserWindow 的第二个选项。

登录.js

const { BrowserWindow } = require("electron").remote;

function onButtonClick() {
    let win = BrowserWindow.fromId("ID of your window");

    win.loadURL("URL you want to load (your login.html file)");
}

// OR

function onButtonClick() {
    let win = BrowserWindow.getFocusedWindow();

    win.loadURL("URL you want to load (your login.html file)");
}

// OR

function onButtonClick() {
    /*
        Not the best method but would work.
     */

    let wins = BrowserWindow.getAllWindows();

    let windowIndex = /* index of your window in the wins array */

    wins[windowIndex].loadURL("URL you want to load (your login.html file)");
}
Run Code Online (Sandbox Code Playgroud)