// ==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 // @downloadURL none // ==/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); } })();