electron中拦截webview打开新的页面处理

97 阅读1分钟

1.new-window不在使用

在最新的electron中,提供的webview不再支持new-window事件,可以去electron官网上进行查看electron.nodejs.cn/docs/latest…

故采用以下替代方案

2.主进程使用setWindowOpenHandler

1.主进程中

mainWindow 为你创建的window mainWindow = new BrowserWindow(...)

mainWindow.webContents.on('did-attach-webview', 
(e, webContent)=>  { 
 console.log(webContent)  
webContent.setWindowOpenHandler((details)=>{   
 console.log(details)  
//把拦截到事件给到渲染进程
  mainWindow.webContents.send('webview-new-window', webContent.id, details) 
   return {action:'deny'} 
 })});

webContent 就是你mainWindow的webview,通过setWindowOpenHandler进行设置

2.渲染进程

window.electron.ipcRenderer.on('webview-new-window', 
(event: Event, data,details): void => {  
console.log(event) 
 console.log(data) 
 console.log(details)  
//进行自己处理
handleNewWindowOpen(details)})

注意webview 标签要加上allowpopups属性,否则主进程监听不到