Twitter Ad Remover

Remove Twitter/X's Ads

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

Advertisement:

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

Advertisement:

// ==UserScript==
// @name         Twitter Ad Remover
// @name:zh-CN   推特广告清理
// @name:zh-TW   推特廣告清理
// @name:ja      Twitter 広告除去
// @description       Remove Twitter/X's Ads
// @description:zh-CN 移除推特的广告
// @description:zh-TW 移除推特的廣告
// @description:ja    Twitterの広告を除去します
// @namespace    http://tampermonkey.net/
// @version      1.2
// @author       Kamii_Sinogi
// @match        https://twitter.com/*
// @match        https://x.com/*
// @run-at       document-start
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
  'use strict';

  const AD_LABELS = /^(广告|Promoted|Ad|広告|付费合作|已推广|用表情符号回应)$/i;

  const removeAds = (root) => {
    root.querySelectorAll?.('[data-testid="whoToFollowSspAd"]')
      .forEach(el => el.remove());

    root.querySelectorAll?.('span').forEach(span => {
      if (AD_LABELS.test(span.textContent.trim())) {
        span.closest('article')?.remove();
      }
    });
  };

  new MutationObserver(mutations => {
    mutations.forEach(m => {
      m.addedNodes.forEach(node => {
        if (node.nodeType === 1) removeAds(node);
      });
    });
  }).observe(document.documentElement, { childList: true, subtree: true });

  removeAds(document);
})();