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

为何window.open('', '_blank', 'noreferrer')会打开about:blank#blocked且返回null?

问题解析与解答

为什么window.open返回null?

Chrome的弹窗拦截机制会阻止非用户主动交互触发的弹窗请求,此时window.open会返回null。这里的“用户主动交互”指点击、双击、键盘按键等用户直接发起的操作,如果你的window.open调用是在页面加载完成后自动执行、无交互的异步回调(比如未绑定用户操作的setTimeout)中触发,就会被浏览器判定为非合法弹窗请求,直接拦截并返回null。

另外,你使用的参数组合(空URL + noreferrer)可能被Chrome 111的安全策略判定为可疑行为,进一步触发了拦截逻辑。

about:blank#blocked的含义与触发场景

  • 含义:这是Chrome专门用来标记被弹窗拦截机制阻止的窗口的默认页面,#blocked哈希值明确标识该窗口是被浏览器安全策略拦截,无法正常加载目标URL(这里你传入的是空URL,即使允许也会打开空白页,但拦截后会显示这个带标记的页面)。
  • 触发场景:
    • 调用window.open的代码并非由用户主动交互触发(如页面自动执行、无交互的异步代码);
    • 浏览器弹窗拦截级别设置为严格模式,拦截了弱交互或可疑的弹窗请求;
    • 使用了可能被判定为风险的参数组合(比如空URL配合noreferrer,被视为潜在的恶意弹窗行为)。

解决建议

要避免这个问题,必须确保window.open的调用是在用户主动交互的事件处理函数内执行,比如点击事件:

// 绑定按钮点击事件,确保在用户主动操作时调用
document.getElementById('openWindowBtn').addEventListener('click', () => {
  const win = window.open('', '_blank', 'noreferrer');
  if (win) {
    // 窗口成功打开后的操作
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:44:59