阻止 "阅读全文/readmore"

通过 GM_webRequest 阻止加载任何路径包含 readmore.js 的脚本文件。

// ==UserScript==
// @name         阻止 "阅读全文/readmore"
// @name:en      Block readmore.js Request
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  通过 GM_webRequest 阻止加载任何路径包含 readmore.js 的脚本文件。
// @description:en Blocks requests to any script file whose path contains readmore.js using GM_webRequest.
// @author       AI Assistant & Your Name
// @match        *://*/*
// @grant        GM_webRequest
// @run-at       document-start
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // --- 配置 ---
    // 你可以在这里修改要阻止的脚本文件名或路径中的关键字
    const blockKeyword = 'readmore.js';
    // 是否在控制台输出阻止日志
    const enableLogging = true;
    // --- 配置结束 ---

    // 检查 GM_webRequest 是否可用
    if (typeof GM_webRequest === 'undefined') {
        if (enableLogging) {
            console.error(`[阻止 ${blockKeyword}] 错误: GM_webRequest API 不可用。请确保您的用户脚本管理器(如 Tampermonkey)支持此功能,并且脚本已获得相应授权。`);
        }
        // 可以取消注释下一行以弹窗提示用户,但这可能会比较烦人
        // alert(`【${blockKeyword} 阻止脚本】需要 GM_webRequest API,您的环境可能不支持或未授权。`);
        return;
    }

    if (enableLogging) {
        console.log(`[阻止 ${blockKeyword}] 脚本已启动,尝试添加规则以阻止包含 "${blockKeyword}" 的请求。`);
    }

    // 定义 web 请求规则
    const rules = [
        {
            // 选择器:匹配所有 URL 路径中包含 blockKeyword 的请求
            // 语法 '*://*/*<keyword>*' 匹配任何协议、任何域名下,路径中包含 <keyword> 的 URL
            selector: `*://*/*${blockKeyword}*`,
            // 操作:取消(阻止)匹配到的请求
            action: { cancel: true }
        }
    ];

    // 应用规则
    try {
        // GM_webRequest 的注册(不可用)函数本身可能返回一个包含 ruleId 的对象,或通过回调传递信息
        // Tampermonkey 文档建议使用回调方式处理结果
        GM_webRequest(rules, (info, message, details) => {
            // 这个回调主要用于确认规则添加/移除状态或报告错误
            // 它通常不会在每次请求被阻止时触发 (因为 action: { cancel: true } 直接处理了)
            if (message === 'ruleAdded') {
                if (enableLogging) {
                    console.log(`[阻止 ${blockKeyword}] 规则添加成功: ${JSON.stringify(details.rule)} (ID: ${details.ruleId})`);
                }
            } else if (message === 'ruleRemoved') {
                if (enableLogging) {
                    console.log(`[阻止 ${blockKeyword}] 规则已移除: ${JSON.stringify(details.rule)} (ID: ${details.ruleId})`);
                }
            } else if (message === 'error') {
                 console.error(`[阻止 ${blockKeyword}] 应用规则时出错: ${details.error} - 规则: ${JSON.stringify(details.rule)}`);
                 // alert(`应用请求阻止规则时出错: ${details.error}`);
            }
            // 注意:info, message, details 的具体内容和触发时机可能因用户脚本管理器和规则类型而异。
            // 对于 {cancel: true} 规则,主要关注 'ruleAdded' 和 'error' 消息。
        });

    } catch (e) {
        console.error(`[阻止 ${blockKeyword}] 设置 GM_webRequest 时发生意外错误:`, e);
        alert(`【${blockKeyword} 阻止脚本】设置请求阻止规则时发生错误,请检查浏览器控制台获取详细信息。`);
    }

})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址