如何用Tampermonkey屏蔽指定网站的iframe与ID为dodo的div?
Tampermonkey脚本修复与内容屏蔽方案
一、完整解决方案脚本
以下脚本同时实现屏蔽所有iframe和移除ID为"dodo"的div元素,无需外部依赖,稳定兼容各类场景:
// ==UserScript== // @name Block Iframes & Remove Dodo Element // @namespace http://tampermonkey.net/ // @match https://www.exemple.com/* // @grant GM_addStyle // ==/UserScript== // 1. 屏蔽所有iframe(CSS方式高效拦截,覆盖静态+动态加载的iframe) GM_addStyle(` iframe { display: none !important; visibility: hidden !important; position: absolute !important; top: -9999px !important; left: -9999px !important; } `); // 2. 移除ID为"dodo"的元素(原生JS处理静态+动态加载的元素) function removeDodo() { const dodoEl = document.getElementById('dodo'); if (dodoEl) dodoEl.remove(); } // 页面加载完成后先检查一次静态元素 removeDodo(); // 监听DOM变化,拦截后续动态添加的dodo元素 const dodoObserver = new MutationObserver((mutations) => { mutations.forEach(mutation => { // 检查新增节点是否为目标元素 mutation.addedNodes.forEach(node => { if (node.id === 'dodo') { node.remove(); } else if (node.querySelector?.('#dodo')) { node.querySelector('#dodo').remove(); } }); // 全局兜底检查,避免遗漏 removeDodo(); }); }); dodoObserver.observe(document.body, { childList: true, subtree: true }); // 可选:彻底移除iframe元素(配合CSS使用,确保无遗漏) const iframeObserver = new MutationObserver((mutations) => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.tagName === 'IFRAME') node.remove(); }); }); }); iframeObserver.observe(document.body, { childList: true, subtree: true });
二、原脚本问题分析
你之前的脚本未生效,核心原因是:
- @match规则错误:
https://www.exemple*无法精准匹配www.exemple.com的页面,必须改为https://www.exemple.com/*才能覆盖目标网站的所有页面 - 依赖外部库可能引入兼容性问题,原生JS实现更稳定可靠
三、方案细节说明
关于iframe屏蔽
- 优先使用
GM_addStyle注入CSS,这种方式最高效,能直接拦截静态和动态加载的iframe,!important确保样式优先级高于网站原有样式 - 额外添加MutationObserver监听是为了彻底移除iframe元素(而非仅隐藏),按需启用即可
关于dodo元素移除
- 初始调用
removeDodo()处理页面加载时已存在的静态元素 - MutationObserver监听DOM变化,拦截后续动态添加的dodo元素,确保无遗漏
内容的提问来源于stack exchange,提问作者Grouik
相关产品推荐
相关产品推荐

