Electron 22版本之后 new-window 事件被移除后的替换方法

WebContents new-window 事件

// 在 Electron 22 已移除
webContents.on('new-window', (event) => {
  event.preventDefault()
})

// 可替换为
webContents.setWindowOpenHandler((details) => {
  return { action: 'deny' }
})

 

<webview> new-window 事件

// 在 Electron 22 中移除
webview.addEventListener('new-window', (event) =>{})

官方给出的结果没有直接替换的方案。

但是有新的比较稍微复杂的方案代替使用,参考下方官方给出的例子。个人感觉新的方法更加灵活,好用!

https://github.com/electron/electron/tree/main/docs/fiddles/ipc/webview-new-window

主进程监听一个特定事件did-attach-webview,该事件在一个webview被附加到主窗口mainWindow之后触发。在这个事件触发后,主进程会对新附加的webview设置一个窗口打开处理函数(通过setWindowOpenHandler方法)。

这个窗口打开处理函数在webview尝试打开一个新窗口时被调用。这里,代码通过返回{ action: 'deny' }来阻止新窗口的打开,并向渲染进程发送一个webview-new-window事件,附带了新窗口打开尝试的相关信息。

渲染进程使用 Electron 的ipcRenderer来接收从主进程发送过来的webview-new-window事件。在接收到事件后,它在webview元素上触发一个自定义事件new-window。

同一个或另一个渲染进程的脚本添加一个事件监听器来捕获在webview元素上触发的new-window事件。当这个事件被捕获时,它会输出一个控制台消息(或进行其他任何你希望进行的操作)。

THE END