已关闭或释放的渲染器窗口中的电子会话Web请求功能

时间:2019-01-17 14:41:50

标签: node.js electron

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

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时,它正在工作。 当我关闭它并再次打开它时,出现此错误

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

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您需要在关闭窗口时删除监听器。

从文档中:⚠️ 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) 
})