Greasy Fork

Greasy Fork is available in English.

知产网页弹窗屏蔽

拦截常用知识产权网站烦人的各种开屏公告和弹窗。

当前为 2025-05-06 提交的版本,查看 最新版本

// ==UserScript==
// @name        知产网页弹窗屏蔽
// @namespace   http://tampermonkey.net/
// @version     1.6
// @description 拦截常用知识产权网站烦人的各种开屏公告和弹窗。
// @grant       none
// @match                *://register.ccopyright.com.cn/*
// @match                *://cpquery.cponline.cnipa.gov.cn/*
// @match                *://wssq.sbj.cnipa.gov.cn/*
// @match                *://interactive.cponline.cnipa.gov.cn/*
// @match                *://cnippc.cn/ippc-web-dzsq/*
// @run-at               document-end
// ==/UserScript==

(function() {
    'use strict';

    // 按域名配置点击选择器 (支持带www的主域名)
    const clickRules = {
        // 多国查询
        'cpquery.cponline.cnipa.gov.cn': [
            '.forget-sure-u .justify-center',      // 使用说明提示
        ]
    };

    // 按域名配置隐藏选择器 (支持带www的主域名)
    const hideRules = {
        // 版权保护中心配置
        'register.ccopyright.com.cn': [
            '#ie_mask',      // 指定浏览器的提示
            '.ie_alert',             // 指定浏览器的提示
        ],
        // 商标申请网配置
        'wssq.sbj.cnipa.gov.cn': [
            '.pop',        // 开屏公告
            '.bgPop',  // 开屏公告
            '#codefans_net',  // 开屏公告
            '.messager-window', // 申请页重要提示
            '.window-mask', // 申请页重要提示
            '.window-shadow', // 申请页重要提示
        ],
        // 专利办理系统配置
        'interactive.cponline.cnipa.gov.cn': [
            '.el-message', // 填写统一信用代码提示
            '.is-closable',            // 填写统一信用代码提示
            '.message-class',            // 填写统一信用代码提示
            '.el-message--error',            // 填写统一信用代码提示
        ],
        // 预审案件提交系统配置
        'cnippc.cn': [
            '#gonggaoModal',        // 开屏公告
        ]
    };

    // 获取当前域名
    const currentHost = window.location.hostname;

    // 获取当前站点的点击规则
    const currentClickSelectors = clickRules[currentHost];

    // 获取当前站点的隐藏规则
    const currentHideSelectors = hideRules[currentHost];

    // 日志输出
    if (currentClickSelectors) {
        console.log(`[${currentHost}] 点击规则已加载:`, currentClickSelectors);
    }
    if (currentHideSelectors) {
        console.log(`[${currentHost}] 隐藏规则已加载:`, currentHideSelectors);
    }

    // 尝试点击特定元素
    function tryClickElement(selectors) {
        selectors.forEach(selector => {
            const element = document.querySelector(selector);
            if (element) {
                console.log(`[${currentHost}] 找到目标元素 ${selector},正在点击...`);
                element.click();
            }
        });
    }

    // 如果存在点击规则,则每隔50ms尝试一次,持续10秒
    if (currentClickSelectors) {
        let attempts = 0;
        const maxAttempts = 200; // 10秒内最多尝试20次
        const interval = setInterval(() => {
            tryClickElement(currentClickSelectors);
            if (attempts++ >= maxAttempts) {
                clearInterval(interval);
                console.log('达到最大尝试次数,停止点击');
            }
        }, 50);
    }

    // 注入CSS隐藏元素
    if (currentHideSelectors) {
        const style = document.createElement('style');
        style.textContent = currentHideSelectors.map(sel => `${sel} { display: none !important; }`).join('\n');
        document.head.appendChild(style);
    }

    // 元素检查函数
    function checkElement(element, selectors) {
        if (selectors.some(sel => element.matches(sel))) {
            element.remove();
            console.log(`[${currentHost}] 移除元素:`, element);
            return;
        }
        selectors.forEach(selector => {
            element.querySelectorAll(selector).forEach(target => {
                target.remove();
                console.log(`[${currentHost}] 移除子元素:`, target);
            });
        });
    }

    // 如果存在隐藏规则,则创建DOM修改监听器
    if (currentHideSelectors) {
        const observer = new MutationObserver(mutations => {
            mutations.forEach(mutation => {
                mutation.addedNodes.forEach(node => {
                    if (node.nodeType === Node.ELEMENT_NODE) {
                        checkElement(node, currentHideSelectors);
                    }
                });
            });
        });

        // 启动DOM监听
        observer.observe(document, {
            childList: true,
            subtree: true
        });
    }

    // 如果存在隐藏规则,则在初始页面加载完成后清理匹配的元素
    if (currentHideSelectors) {
        window.addEventListener('DOMContentLoaded', () => {
            currentHideSelectors.forEach(selector => {
                document.querySelectorAll(selector).forEach(element => {
                    element.remove();
                    console.log(`[${currentHost}] 初始清理:`, element);
                });
            });
        });

        // 增加额外的初始清理步骤(1秒后)
        setTimeout(() => {
            currentHideSelectors.forEach(selector => {
                document.querySelectorAll(selector).forEach(element => {
                    element.remove();
                    console.log(`[${currentHost}] 延迟清理:`, element);
                });
            });
        }, 1000);

        // 增加额外的初始清理步骤(5秒后)
        setTimeout(() => {
            currentHideSelectors.forEach(selector => {
                document.querySelectorAll(selector).forEach(element => {
                    element.remove();
                    console.log(`[${currentHost}] 更长延迟清理:`, element);
                });
            });
        }, 5000);
    }
})();