开发者问题收集

Electron 未捕获异常:TypeError:无法读取 null 的属性(读取“on”)

2022-07-03
1142

仅当我在检查器打开一次后打开新窗口时才会出现此错误。mainWindow 不会出现此错误。

在此处输入图片描述

// Detect maximize-unmaximize to change the maximize button's icon
app.on('browser-window-focus', (event, win) => {
  console.log('Focus: ' + win.webContents.id);
  BrowserWindow.fromId(win.webContents.id).on('ready-to-show', () => {
    BrowserWindow.fromId(win.webContents.id).on('maximize', () => {
      console.log("maximize detected", win.webContents.id);
      BrowserWindow.fromId(win.webContents.id).send('window-events', 'maximize');
    })
    BrowserWindow.fromId(win.webContents.id).on('unmaximize', () => {
      console.log("unmaximize detected", win.webContents.id);
      BrowserWindow.fromId(win.webContents.id).send('window-events', 'unmaximize');
    })
  })
})
2个回答

发生这种情况是因为您正在使用浏览器窗口的同一个 webview 实例。您可以通过在每个窗口中创建一个单独的 webview 然后使用它来解决这个问题。例如,尝试按如下方式更改它:

var myBrowser = require('electron').remote.getGlobal('Browser'); var myBrowser2 = require('electron').remote.getGlobal('Browser2');

myBrowser.webContents.on('dom-ready', function(){ myBrowser2.webContents.send('window-events', 'maximize') }); myBrowser2.webContents.on('dom-ready', function(){ myBrowser.webContents.send('window-events', 'unmaximize') });

您需要确保两个窗口都有自己唯一的 ID,这样它们就不会相互冲突。另请注意,我假设您想从渲染器进程本身内部发送这些事件。如果您想在主进程端接收它们,您应该能够在 getGlobal 返回的远程对象上监听“window-events”。

Lonely Dreamer
2022-07-03

我使用 .getFocusedWindow() 而不是 .fromId 解决了这个问题。 谢谢。

BBB
2022-07-03