您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hide ads on Twitter
- // ==UserScript==
- // @name Hide Twitter Ads
- // @namespace http://tampermonkey.net/
- // @version 0.1
- // @description Hide ads on Twitter
- // @author Yeky
- // @match https://x.com/*
- // @grant none
- // @name:en Hide Twitter Ads
- // @name:zh 隐藏推特广告
- // @description 这个油猴脚本隐藏Twitter上的广告、趋势和用户推荐,提供更干净的浏览体验。
- // @description:en This Tampermonkey script hides ads, trends, and user recommendations on Twitter for a cleaner browsing experience.
- // @icon https://lh3.googleusercontent.com/RhFY2tkBB9MSrgCTDW0JdYnB51bJ_QmEPZRHVISanz34PWFA4CSCwW75m34sR7Oynl38odzKabuCIrWHB44akhHU=s60
- // @license All Rights Reserved
- // ==/UserScript==
- (function() {
- 'use strict';
- var adsHidden = 0;
- var adSelector = "div[data-testid=placementTracking]";
- var trendSelector = "div[data-testid=trend]";
- var userSelector = "div[data-testid=UserCell]";
- var articleSelector = "article[data-testid=tweet]";
- var sponsoredSvgPath = 'M20.75 2H3.25C2.007 2 1 3.007 1 4.25v15.5C1 20.993 2.007 22 3.25 22h17.5c1.243 0 2.25-1.007 2.25-2.25V4.25C23 3.007 21.993 2 20.75 2zM17.5 13.504c0 .483-.392.875-.875.875s-.875-.393-.875-.876V9.967l-7.547 7.546c-.17.17-.395.256-.62.256s-.447-.086-.618-.257c-.342-.342-.342-.896 0-1.237l7.547-7.547h-3.54c-.482 0-.874-.393-.874-.876s.392-.875.875-.875h5.65c.483 0 .875.39.875.874v5.65z';
- var sponsoredBySvgPath = 'M19.498 3h-15c-1.381 0-2.5 1.12-2.5 2.5v13c0 1.38 1.119 2.5 2.5 2.5h15c1.381 0 2.5-1.12 2.5-2.5v-13c0-1.38-1.119-2.5-2.5-2.5zm-3.502 12h-2v-3.59l-5.293 5.3-1.414-1.42L12.581 10H8.996V8h7v7z';
- var youMightLikeSvgPath = 'M12 1.75c-5.11 0-9.25 4.14-9.25 9.25 0 4.77 3.61 8.7 8.25 9.2v2.96l1.15-.17c1.88-.29 4.11-1.56 5.87-3.5 1.79-1.96 3.17-4.69 3.23-7.97.09-5.54-4.14-9.77-9.25-9.77zM13 14H9v-2h4v2zm2-4H9V8h6v2z';
- var adsSvgPath = 'M19.498 3h-15c-1.381 0-2.5 1.12-2.5 2.5v13c0 1.38 1.119 2.5 2.5 2.5h15c1.381 0 2.5-1.12 2.5-2.5v-13c0-1.38-1.119-2.5-2.5-2.5zm-3.502 12h-2v-3.59l-5.293 5.3-1.414-1.42L12.581 10H8.996V8h7v7z';
- var peopleFollowSvgPath = 'M17.863 13.44c1.477 1.58 2.366 3.8 2.632 6.46l.11 1.1H3.395l.11-1.1c.266-2.66 1.155-4.88 2.632-6.46C7.627 11.85 9.648 11 12 11s4.373.85 5.863 2.44zM12 2C9.791 2 8 3.79 8 6s1.791 4 4 4 4-1.79 4-4-1.791-4-4-4z';
- var xAd = '>Ad<'; // TODO: add more languages; appears to only be used for English accounts as of 2023-08-03
- var removePeopleToFollow = false; // set to 'true' if you want these suggestions removed, however note this also deletes some tweet replies
- const promotedTweetTextSet = new Set(['Promoted Tweet', 'プロモツイート']);
- function getAds() {
- return Array.from(document.querySelectorAll('div')).filter(function(el) {
- var filteredAd;
- if (el.innerHTML.includes(sponsoredSvgPath)) {
- filteredAd = el;
- } else if (el.innerHTML.includes(sponsoredBySvgPath)) {
- filteredAd = el;
- } else if (el.innerHTML.includes(youMightLikeSvgPath)) {
- filteredAd = el;
- } else if (el.innerHTML.includes(adsSvgPath)) {
- filteredAd = el;
- } else if (removePeopleToFollow && el.innerHTML.includes(peopleFollowSvgPath)) {
- filteredAd = el;
- } else if (el.innerHTML.includes(xAd)) {
- filteredAd = el;
- } else if (promotedTweetTextSet.has(el.innerText)) { // TODO: bring back multi-lingual support from git history
- filteredAd = el;
- }
- return filteredAd;
- })
- }
- function hideAd(ad) {
- if (ad.closest(adSelector) !== null) { // Promoted tweets
- ad.closest(adSelector).remove();
- adsHidden += 1;
- } else if (ad.closest(trendSelector) !== null) {
- ad.closest(trendSelector).remove();
- adsHidden += 1;
- } else if (ad.closest(userSelector) !== null) {
- ad.closest(userSelector).remove();
- adsHidden += 1;
- } else if (ad.closest(articleSelector) !== null) {
- ad.closest(articleSelector).remove();
- adsHidden += 1;
- } else if (promotedTweetTextSet.has(ad.innerText)) {
- ad.remove();
- adsHidden += 1;
- }
- console.log('X ads hidden: ', adsHidden.toString());
- }
- function getAndHideAds() {
- getAds().forEach(hideAd)
- }
- // hide ads on page load
- window.addEventListener('load', () => getAndHideAds());
- // oftentimes, tweets render after onload. LCP should catch them.
- new PerformanceObserver((entryList) => {
- getAndHideAds();
- }).observe({type: 'largest-contentful-paint', buffered: true});
- // re-check as user scrolls
- window.addEventListener('scroll', () => getAndHideAds());
- // re-check as user scrolls tweet sidebar (exists when image is opened)
- var sidebarExists = setInterval(function() {
- let timelines = document.querySelectorAll("[aria-label='Timeline: Conversation']");
- if (timelines.length == 2) {
- let tweetSidebar = document.querySelectorAll("[aria-label='Timeline: Conversation']")[0].parentElement.parentElement;
- tweetSidebar.addEventListener('scroll', () => getAndHideAds());
- }
- }, 500);
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址