You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Tampermonkey禁用网站指定JavaScript脚本以阻止弹窗

如何通过Tampermonkey禁用网站指定JavaScript脚本以阻止弹窗

嘿,我来帮你搞定这个问题!你在Chrome DevTools里能手动禁用脚本,但要通过Tampermonkey自动实现,核心就是在脚本加载前拦截它的请求,让浏览器根本不执行那个触发弹窗的脚本。下面给你两种可行的方案,按需选择:

方案一:完全拦截目标脚本加载

这种方法最直接,和你在DevTools里禁用脚本的效果一致。需要注意的是,必须让Tampermonkey脚本在页面最开始就运行,才能赶在目标脚本加载前设置拦截。

直接复制下面的代码到你的Tampermonkey脚本里,记得修改对应的网站匹配规则:

// ==UserScript==
// @name         拦截框架脚本阻止弹窗
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  拦截指定的framework脚本,阻止触发 unwanted popup
// @author       你自己的名字
// @match        *://website.com/*  // 替换成目标网站的完整域名匹配,比如*://www.website.com/*
// @run-at       document-start    // 关键!必须在文档加载前运行,才能拦截脚本请求
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 监听所有资源加载前的事件,捕获阶段触发
    window.addEventListener('beforeload', function(e) {
        // 目标脚本的完整URL
        const targetScript = 'https://website.com/_next/static/chunks/framework-ca706bf673a13738.js';
        // 匹配到目标脚本就阻止加载
        if (e.target.src === targetScript) {
            e.preventDefault();
            e.stopPropagation();
            console.log('成功拦截目标脚本:', targetScript);
        }
    }, true);
})();

关键细节说明:

  • @run-at document-start:这行是核心中的核心,只有让Tampermonkey脚本在页面初始化的最早期运行,才能在目标脚本发出请求前就设好拦截器,不然脚本已经加载完就晚了。
  • beforeload事件+捕获阶段:第三个参数true让事件在捕获阶段触发,比默认的冒泡阶段更早处理,能避开网站可能的其他事件监听干扰。
  • 如果目标脚本的URL会更新(比如哈希值变化),可以改用模糊匹配:
    // 只要URL包含指定路径片段就拦截
    if (e.target.src.includes('/_next/static/chunks/framework-')) {
        e.preventDefault();
        e.stopPropagation();
    }
    

方案二:仅禁用弹窗函数(不影响脚本其他功能)

如果完全禁用那个脚本后,网站的其他功能出问题了,说明这个脚本是网站必需的。这时候可以换个思路:找到触发弹窗的具体函数,重写它让它失效。

假设触发弹窗的函数叫showUnwantedPopup,可以用下面的脚本:

// ==UserScript==
// @name         禁用弹窗触发函数
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  重写弹窗函数,阻止 unwanted popup 弹出
// @author       你自己的名字
// @match        *://website.com/*
// @run-at       document-end
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 重写目标弹窗函数,让它什么都不做
    window.showUnwantedPopup = function() {
        console.log('弹窗函数已被禁用');
        // 如果需要保留原函数的部分逻辑,可以在这里调用原函数但跳过弹窗代码
        // 比如原函数接收参数,你可以根据需求调整
    };
})();

怎么找到弹窗函数?

你可以在Chrome DevTools里:

  1. 点击弹窗触发的元素,查看绑定的事件
  2. 在Sources面板里搜索关键词(比如“popup”“modal”),定位到触发弹窗的函数

测试验证

设置好脚本后,刷新目标页面,打开浏览器控制台(F12),如果看到我们脚本里的日志输出,就说明拦截/禁用成功了,再点击触发弹窗的元素,应该就不会弹出那个讨厌的窗口啦。

备注:内容来源于stack exchange,提问作者Digitas Merero

火山引擎 最新活动