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

如何通过Tampermonkey阻止指定module.js文件加载?

用Tampermonkey拦截指定script标签加载的JS文件

问题说明

需要阻止目标网站通过<script>标签引入的特定module.js文件加载,该标签代码如下:

<script charset="utf-8" id="yui_3_17_2_1_1672056888038_9" src="https://exam.lood.so/lib/javascript.php/1671548766/mod/quiz/module.js" async=""></script>

现有脚本仅能拦截XHR/fetch请求,无法处理这类直接通过script标签发起的资源请求,且不想每次手动用DevTools拦截。

实现脚本

Tampermonkey要拦截这类请求,需在DOM加载前拦截script标签的创建与属性设置,具体脚本如下:

// ==UserScript==
// @name         拦截指定module.js加载
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  阻止exam.lood.so的指定module.js加载
// @author       You
// @match        https://exam.lood.so/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 要拦截的目标URL
    const targetUrl = "https://exam.lood.so/lib/javascript.php/1671548766/mod/quiz/module.js";

    // 重写document.createElement方法,拦截script标签创建
    const originalCreateElement = document.createElement;
    document.createElement = function(tagName) {
        const element = originalCreateElement.call(this, tagName);
        if (tagName.toLowerCase() === 'script') {
            // 拦截setAttribute设置src的情况
            const originalSetAttribute = element.setAttribute;
            element.setAttribute = function(name, value) {
                if (name.toLowerCase() === 'src' && value === targetUrl) {
                    console.log('已拦截目标脚本加载:', targetUrl);
                    return; // 不设置src,阻止加载
                }
                originalSetAttribute.call(this, name, value);
            };
            // 拦截直接赋值src属性的情况
            Object.defineProperty(element, 'src', {
                set: function(value) {
                    if (value === targetUrl) {
                        console.log('已拦截目标脚本加载:', targetUrl);
                        return;
                    }
                    originalSetAttribute.call(this, 'src', value);
                },
                get: function() {
                    return this.getAttribute('src');
                }
            });
        }
        return element;
    };

    // 清理DOM加载完成后可能已存在的目标脚本
    document.addEventListener('DOMContentLoaded', function() {
        const scripts = document.querySelectorAll('script[src]');
        scripts.forEach(script => {
            if (script.src === targetUrl) {
                script.remove();
                console.log('已移除已加载的目标脚本');
            }
        });
    });
})();

关键说明

  • @run-at document-start:确保脚本在DOM开始构建前运行,能及时拦截脚本标签的创建过程
  • 双重拦截逻辑:同时处理通过setAttribute和直接赋值src属性两种设置脚本地址的方式,避免被绕过
  • DOMContentLoaded事件处理:清理可能在脚本运行前就已插入DOM的目标脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:31:15