拋棄雜七雜八的廣吿攔截器,試試這款輕量級 屏蔽廣告、彈窗、追蹤器
当前为
// ==UserScript==
// @name AD block(Weiren)
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 拋棄雜七雜八的廣吿攔截器,試試這款輕量級 屏蔽廣告、彈窗、追蹤器
// @author Weiren
// @match *://*/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 常見的廣告選擇器
const adSelectors = [
'iframe[src*="ads"]',
'[id^="ad"]',
'[class^="ad"]',
'[id*="advert"]',
'[class*="advert"]',
'[id*="sponsor"]',
'[class*="sponsor"]',
'[id*="banner"]',
'[class*="banner"]',
'[id*="popup"]',
'[class*="popup"]',
'[id*="promo"]',
'[class*="promo"]',
'[id*="commercial"]',
'[class*="commercial"]',
'[id*="tracker"]',
'[class*="tracker"]',
'[id*="tracking"]',
'[class*="tracking"]',
'script[src*="analytics"]',
'script[src*="track"]',
'script[src*="pixel"]'
];
// 屏蔽廣告和追蹤器
function removeAdsAndTrackers() {
adSelectors.forEach(selector => {
const elements = document.querySelectorAll(selector);
elements.forEach(el => el.remove());
});
// 屏蔽全屏覆蓋的彈窗
const popups = document.querySelectorAll('*');
popups.forEach(popup => {
const styles = window.getComputedStyle(popup);
if (
(styles.position === 'fixed' || styles.position === 'absolute') &&
(parseInt(styles.width) > window.innerWidth * 0.5 ||
parseInt(styles.height) > window.innerHeight * 0.5) &&
(popup.innerHTML.includes('關閉') || popup.innerText.length < 500)
) {
popup.remove();
}
});
// 自動點擊 "關閉" 按鈕
const closeButtons = document.querySelectorAll('button, a, div');
closeButtons.forEach(button => {
if (
button.innerText.includes('關閉') ||
button.innerHTML.includes('×') ||
button.title.includes('關閉')
) {
button.click();
}
});
}
// 初始屏蔽廣告和追蹤器
removeAdsAndTrackers();
// 使用 MutationObserver 動態監控並屏蔽新加載的廣告和追蹤器
const observer = new MutationObserver(mutations => {
mutations.forEach(() => removeAdsAndTrackers());
});
observer.observe(document.body, { childList: true, subtree: true });
// 屏蔽可能的第三方追蹤器請求
const originalFetch = window.fetch;
window.fetch = function(...args) {
if (args[0] && args[0].includes('track')) {
console.log('屏蔽追蹤器請求:', args[0]);
return Promise.resolve(new Response('{}', { status: 204 }));
}
return originalFetch.apply(this, args);
};
const originalXHROpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, url, ...rest) {
if (url.includes('track')) {
console.log('屏蔽追蹤器請求:', url);
return;
}
return originalXHROpen.call(this, method, url, ...rest);
};
})();