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

如何禁用页面部分Alert弹窗并保留指定弹窗?原生JS实现遇递归问题

解决alert递归调用问题,实现部分弹窗拦截

这问题我太熟了!你之前的代码之所以陷入递归,核心原因是重写window.alert之后,函数里调用的alert()其实是你刚定义的新函数,不是浏览器原生的弹窗方法。要解决这个,关键是先把原生alert的引用存下来,之后直接调用这个保存好的原生方法就行。

核心解决方案代码

// 先把原生alert存到独立变量里,避免被重写覆盖
const nativeAlert = window.alert;

// 重写window.alert函数
window.alert = function(text) {
  // 判断弹窗内容是否包含"rambo",符合条件就调用原生alert弹出
  if (text.includes("rambo")) {
    nativeAlert(text);
  } else {
    // 不符合的弹窗,只输出到控制台,不显示弹窗
    console.log("已拦截alert:", text);
  }
};

为什么这样能行?

nativeAlert变量保存了原始的window.alert函数引用,当我们在重写的函数里调用nativeAlert(text)时,触发的是浏览器自带的原生弹窗,完全不会触发我们自己写的重写版本,自然就避免了递归问题。

扩展:支持多个允许的关键词

如果之后需要允许多个关键词的弹窗,也可以轻松扩展:

const nativeAlert = window.alert;
// 定义允许弹出的关键词列表
const allowedAlertKeywords = ["rambo", "系统提示", "critical"];

window.alert = function(text) {
  // 检查内容是否包含任意一个允许的关键词
  const shouldShowAlert = allowedAlertKeywords.some(keyword => text.includes(keyword));
  if (shouldShowAlert) {
    nativeAlert(text);
  } else {
    console.log("拦截alert内容:", text);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:58