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