You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron父窗口开启nativeWindowOpen时webview的target=_blank链接无法打开怎么办

解决方法

方案一:preload脚本注入拦截(无崩溃风险,兼容性最优)

无需给webview添加allowpopups属性,规避Mac系统下的SIGSEGV崩溃问题,完全在webview上下文内处理跳转:

  1. 给webview标签添加preload属性,指定专属预加载文件:
<webview id="foo" src="https://www.w3schools.com/tags/att_a_target.asp" style="display:inline-flex; width:640px; height:480px" preload="./webpreload.js"></webview>
  1. 编写webpreload.js内容,全局拦截target="_blank"链接的点击行为:
document.addEventListener('click', (e) => {
  const targetA = e.target.closest('a[target="_blank"]')
  if (targetA) {
    e.preventDefault()
    // 在当前webview内打开链接,如需在系统浏览器/新Electron窗口打开可替换对应逻辑
    window.location.href = targetA.href
  }
}, true)

方案二:主进程监听did-create-window事件(适合需要原生弹窗的场景)

nativeWindowOpen: true配置下,新窗口创建会触发did-create-window事件而非旧的new-window事件,在主进程添加全局监听即可处理:

// 主进程代码
app.on('web-contents-created', (_, contents) => {
  if (contents.getType() === 'webview') {
    contents.on('did-create-window', (newWindow, details) => {
      // 如需在原webview内打开,阻止新窗口创建后手动导航即可
      newWindow.destroy()
      contents.loadURL(details.url)
      // 如需保留新窗口可删除上述两行,直接自定义newWindow配置
    })
  }
})

补充说明

Mac下添加allowpopups触发崩溃是Electron 14及更早版本的已知bug,升级到15+版本可修复,但上述两种方案无需升级版本,也不会修改父窗口nativeWindowOpen: true的配置,符合要求。

内容的提问来源于stack exchange,提问作者Alok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:15:04