已关闭或释放的渲染器窗口中的电子会话网络请求函数



从主窗口,我使用此代码单击打开一个窗口

pwin = new BrowserWindow({
  width: 355,
  height: 250
})
pwin.loadURL(`file://${__dirname}/players/jwplayer.html`);
// pwin.setMenu(null)
pwin.webContents.on('did-finish-load', () => {
  pwin.webContents.send('link', link);
  pwin.webContents.send('name', title);
});

在新窗口中,我有一个修改请求标头的代码

session.defaultSession.webRequest.onBeforeSendHeaders(['*://*./*'], (details, callback) => {
  if (details.url.indexOf('okaystreamz') > -1) {
    details.requestHeaders['User-Agent'] = 'tvingoplus@livetv.tvingo1Z!2018';
  }
  callback({
    cancel: false,
    requestHeaders: details.requestHeaders
  })
});

当我第一次打开 pwin 时,它正在工作。当我关闭它并再次打开它时,出现此错误

"尝试在已关闭或释放的渲染器窗口中调用函数。"

任何帮助将不胜感激

您需要一个在窗口关闭时删除侦听器的事件。

来自文档: ⚠️ Only the last attached listener will be used. Passing null as listener will unsubscribe from the event. https://electronjs.org/docs/api/web-request

例如。在函数后添加以下内容(注意 null 代替侦听器):

window.addEventListener('beforeunload', function(event) {
    session.defaultSession.webRequest.onBeforeSendHeaders( ['*://*./*'], null) 
})

最新更新