移除 Yandex 邮件中的广告
// ==UserScript==
// @name Yandex mail Advertisement Remover
// @description Remove advertisement at Yandex mail
// @name:ar مزيل إعلانات ياندكس ميل
// @description:ar إزالة الإعلانات في ياندكس ميل
// @name:bg Премахване на реклами в Yandex Mail
// @description:bg Премахване на реклами в Yandex Mail.
// @name:cs Odstraňovač reklam v Yandex Mailu
// @description:cs Odstraní reklamy v Yandex Mailu
// @name:da Yandex Mail Reklamefjerner
// @description:da Fjerner reklamer i Yandex Mail
// @name:de Yandex Mail Werbeentferner
// @description:de Entfernt Werbung in Yandex Mail
// @name:el Αφαίρεση διαφημίσεων Yandex Mail
// @description:el Αφαιρεί διαφημίσεις στο Yandex Mail
// @name:en Yandex Mail Advertisement Remover
// @description:en Remove advertisement at Yandex mail
// @name:eo Yandex Mail Reklamforigardilo
// @description:eo Forigas reklamojn en Yandex Mail
// @name:es Eliminador de publicidad de Yandex Mail
// @description:es Elimina la publicidad en Yandex Mail
// @name:fi Yandex Mail -mainosten poistaja
// @description:fi Poistaa mainokset Yandex Mailista
// @name:fr Suppresseur de publicité Yandex Mail
// @description:fr Supprime la publicité dans Yandex Mail
// @name:fr-CA Suppresseur de publicité Yandex Mail
// @description:fr-CA Supprime la publicité dans Yandex Mail
// @name:he מסיר פרסומות של Yandex Mail
// @description:he מסיר פרסומות ב-Yandex Mail
// @name:hr Uklanjanje oglasa Yandex Maila
// @description:hr Uklanja oglase na Yandex Mailu
// @name:hu Yandex Mail hirdetéseltávolító
// @description:hu Eltávolítja a hirdetéseket a Yandex Mailben
// @name:id Penghilang Iklan Yandex Mail
// @description:id Menghilangkan iklan di Yandex Mail
// @name:it Rimozione pubblicità Yandex Mail
// @description:it Rimuove la pubblicità in Yandex Mail
// @name:ja Yandex Mail広告リムーバー
// @description:ja Yandex Mailの広告を削除します
// @name:ka Yandex Mail-ის რეკლამის ამომშლელი
// @description:ka აშორებს რეკლამას Yandex Mail-ში
// @name:ko Yandex 메일 광고 제거기
// @description:ko Yandex 메일의 광고를 제거합니다.
// @name:nb Yandex Mail Reklamefjerner
// @description:nb Fjerner reklame i Yandex Mail
// @name:nl Yandex Mail Advertentie Verwijderaar
// @description:nl Verwijdert advertenties in Yandex Mail
// @name:pl Usuwanie reklam z Yandex Mail
// @description:pl Usuwa reklamy w Yandex Mail
// @name:pt-BR Removedor de Anúncios do Yandex Mail
// @description:pt-BR Remove anúncios no Yandex Mail
// @name:ro Eliminator de reclame Yandex Mail
// @description:ro Elimină reclamele din Yandex Mail
// @name:ru Удаление рекламы в Яндекс Почте
// @description:ru Удаляет рекламу в Яндекс Почте
// @name:sk Odstraňovač reklám Yandex Mail
// @description:sk Odstráni reklamy v Yandex Mail
// @name:sr Уклањање реклама са Yандекс Маила
// @description:sr Уклања рекламе са Yандекс Маила
// @name:sv Yandex Mail Annonsborttagare
// @description:sv Tar bort annonser i Yandex Mail
// @name:th ตัวลบโฆษณา Yandex Mail
// @description:th ลบโฆษณาใน Yandex Mail
// @name:tr Yandex Mail Reklam Kaldırıcı
// @description:tr Yandex Mail'deki reklamları kaldırır
// @name:ug Yandex почта ئېلان ئۆچۈرگۈچ
// @description:ug Yandex почта دىكى ئېلاننى ئۆچۈرۋېتىدۇ
// @name:uk Видалення реклами в Yandex Mail
// @description:uk Видаляє рекламу в Yandex Mail
// @name:vi Trình xóa quảng cáo Yandex Mail
// @description:vi Xóa quảng cáo trong Yandex Mail
// @name:zh Yandex 邮件广告移除器
// @description:zh 移除 Yandex 邮件中的广告
// @name:zh-CN Yandex 邮件广告移除器
// @description:zh-CN 移除 Yandex 邮件中的广告
// @name:zh-HK Yandex 邮件广告移除器
// @description:zh-HK 移除 Yandex 邮件中的广告
// @name:zh-SG Yandex 邮件广告移除器
// @description:zh-SG 移除 Yandex 邮件中的广告
// @name:zh-TW Yandex 邮件广告移除器
// @description:zh-TW 移除 Yandex 邮件中的广告
// @version 0.0.2
// @author aspen138
// @match http*://mail.yandex.ru/*
// @match https://mail.yandex.com/*
// @grant none
// @namespace http://tampermonkey.net/
// @license MIT
// @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAPVJREFUOBHFULsOgkAQXOCw0uMrjIUfYGOjlS8STXzEzi/xmyz0w7QyiuIMhzm4gqCJcZM9dm9nZocT+Xd46b6Xyin5zscivCqZKBEP/OOHIstQZBjc/Gz1GCJTZN0geRBkaCPAkk5mNUSWwORk0qwAOzqJK0RWJJfn5Y4iI1wFeJTDnZ2NLWz3jW176TrgBDhZN0Q2yHfsUMcYUNiJsgMFQBN/RdwchDZqIjr5Zo36koo8rIoV8AFugVlc0nUsexhq3J2h8DQi5hF5Rsgi2S4pV8REEDHM/KPRUb1uEEonCCWRSiRIHa/ZrPogQ/uFl66G/276AufFGp4pjOgzAAAAAElFTkSuQmCC
// ==/UserScript==
(function() {
'use strict';
const observerConfig = { childList: true, subtree: true, attributes: true };
const allowedViewValues = new Set(['notifications', 'labels', 'footer', 'app']);
const allowedLayoutDataKeys = new Set([
'box=fake-head-background-box',
'box=toolbar-box',
'box=infoline-box',
'box=right-box',
'box=advanced-search-box'
]);
let observer = null;
let isProcessing = false;
const cleanupTasks = [
hideMessageListBanners,
hideViewPortals,
hideDisableAdsButtons,
removeLeftColumnAdPane,
pruneMailLayoutContent,
hideBannerBlocks,
hideAdElement,
];
function processDom() {
if (isProcessing) {
return;
}
isProcessing = true;
try {
for (const task of cleanupTasks) {
task();
}
} finally {
isProcessing = false;
}
}
function ensureObserver() {
if (observer || !document.body) {
return;
}
observer = new MutationObserver(processDom);
observer.observe(document.body, observerConfig);
}
function hideElement(element) {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return false;
}
if (element.style.display === 'none') {
return false;
}
element.style.display = 'none';
return true;
}
function removeElement(element) {
if (!element || !element.remove || !element.isConnected) {
return false;
}
element.remove();
return true;
}
function nextElementSibling(node) {
if (!node) {
return null;
}
let sibling = node.nextSibling;
while (sibling) {
if (sibling.nodeType === Node.ELEMENT_NODE) {
return sibling;
}
sibling = sibling.nextSibling;
}
return null;
}
function hideMessageListBanners() {
document.querySelectorAll('[class="message-list-banner-portal"]').forEach((portal) => {
const banner = nextElementSibling(portal);
hideElement(banner);
});
}
function hideViewPortals() {
document.querySelectorAll('[data-key^="view="]').forEach((element) => {
const key = element.dataset ? element.dataset.key : undefined;
if (!key) {
return;
}
const matches = key.match(/^view=([a-z]+)$/);
if (!matches) {
return;
}
const view = matches[1];
if (allowedViewValues.has(view)) {
return;
}
hideElement(element);
});
}
function hideDisableAdsButtons() {
document.querySelectorAll('a[class*="DisableAdsButton"]').forEach((element) => {
hideElement(element);
});
}
function removeLeftColumnAdPane() {
const leftColumn = document.querySelector('.ns-view-react-left-column');
if (!leftColumn) {
return;
}
const adPane = nextElementSibling(leftColumn);
removeElement(adPane);
}
function pruneMailLayoutContent() {
const layout = document.querySelector('.mail-Layout-Content');
if (!layout) {
return;
}
Array.from(layout.children).forEach((child) => {
const dataKey = child.getAttribute('data-key');
if (!dataKey) {
return;
}
if (!allowedLayoutDataKeys.has(dataKey)) {
removeElement(child);
}
});
}
function hideBannerBlocks() {
document.querySelectorAll('.BannersBlock').forEach((block) => {
if (!hideElement(block.parentElement)) {
hideElement(block);
}
});
}
function hideAdElement() {
const adContainer = document.querySelector('.mtASX4sMdaVI41xsJ');
if (adContainer) {
const shadowRoot = adContainer.shadowRoot || adContainer.attachShadow({ mode: 'open' });
const adElement = shadowRoot.querySelector('.w35dbb536');
if(adElement){
hideElement(adElement.parentElement);
}
}
}
function bootstrap() {
processDom();
ensureObserver();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', bootstrap, { once: true });
} else {
bootstrap();
}
})();