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事件。当这个事件被捕获时,它会输出一个控制台消息(或进行其他任何你希望进行的操作)。
版权声明:
作者:Teroun
链接:https://blog.bingxs.com/electron22abzhnewwindowsjbychdthff.html
文章版权归作者所有,未经允许请勿转载。
THE END