Скрой спонсированные посты в LinkedIn / Facebook / Twitter / X — CSS + MutationObserver
Ленты соцсетей — это ~30% спонсированных постов, смешанных с органикой. Спонсированные посты спроектированы не выглядеть рекламой — случайные хеши классов, динамический DOM. Стандартные блокировщики рекламы перехватывают их по URL-паттернам (DoubleClick, Adsense), не по layout ленты. Вот где JustZix, комбинируя CSS + JS, блистает.
LinkedIn (linkedin.com)
У LinkedIn самый запутанный DOM. Имена классов вроде .feed-shared-update-v2--ad стабильны, но меняются при каждом рестайлинге. Текстовое совпадение надёжно:
/* CSS-попытка — перехватывает некоторые */
[data-ad-banner], .feed-shared-update-v2--promoted,
.feed-shared-actor__sub-description:has-text("Promoted") {
display: none !important;
}
CSS :has-text() НЕ стандартен — это эксклюзивный псевдокласс JustZix. Фолбэк через JS MutationObserver:
// JS-правило — текстовое совпадение «Promoted» в карточках ленты
const hideSponsored = () => {
document.querySelectorAll('.feed-shared-update-v2, [data-id*="urn:li:activity"]').forEach(card => {
if (card.dataset.jzChecked) return;
card.dataset.jzChecked = '1';
const text = card.textContent;
if (/^Promoted|Sponsored/m.test(text) ||
/\bPromoted\b/.test(card.querySelector('.feed-shared-actor__sub-description')?.textContent || '')) {
card.style.display = 'none';
JUSTZIX.log(`[LinkedIn] Спонсированная карточка скрыта`);
}
});
};
new MutationObserver(hideSponsored).observe(document.body, {childList: true, subtree: true});
hideSponsored();
Facebook (facebook.com)
У FB маркеры на основе ARIA — более стабильные, чем имена классов:
/* Посты с меткой «Sponsored» — Facebook использует aria-атрибуты */
div[aria-label="Sponsored"],
div:has(> * > span[aria-label="Sponsored"]),
[data-pagelet*="Sponsored"] {
display: none !important;
}
/* Боковая колонка с «Suggested for you» */
[aria-label="Suggested for you"], [aria-label="Reels and short videos"] {
display: none !important;
}
JS-бустер — чистит ленту при прокрутке, поскольку бесконечная прокрутка загружает новые посты:
// JS-правило
new MutationObserver(() => {
document.querySelectorAll('div[role="feed"] > div').forEach(post => {
if (post.dataset.jzChecked) return;
post.dataset.jzChecked = '1';
if (post.querySelector('[aria-label="Sponsored"]')) {
post.style.display = 'none';
JUSTZIX.log('[FB] Спонсированное скрыто');
}
});
}).observe(document.body, {childList: true, subtree: true});
Twitter / X (twitter.com / x.com)
У X есть метка «Promoted» как SVG-иконка + текст. У Twitter также боковые колонки «Предложения» / «Тренды для тебя»:
/* Спонсированные твиты */
article:has([data-testid="promotedIndicator"]),
article:has(svg[data-testid="ad"]) {
display: none !important;
}
/* Боковая колонка Тренды + Кого читать */
[aria-label="Timeline: Trending now"],
[data-testid="sidebarColumn"] [data-testid="UserCell"] {
display: none !important;
}
Сценарий 1 — TOGGLE3 «Уровень анти-рекламной защиты»
Трёхступенчатая строгость по платформам:
// Действие TOGGLE3 «🛡️ Защита»
states[0] = { label: 'Off', value: 'off' } // никакой фильтрации
states[1] = { label: 'Normal', value: 'normal' } // скрой спонсированное
states[2] = { label: 'Strict', value: 'strict' } // скрой спонсированное + предложенное + тренды
code: |
document.documentElement.dataset.jzProtection = value;
JUSTZIX.log(`Защита: ${value}`);
CSS-правило использует data-атрибут:
html[data-jz-protection="off"] .jz-hide-sponsored { display: block !important; }
html[data-jz-protection="strict"] [aria-label*="Suggested"] { display: none !important; }
Сценарий 2 — Output Console считает скрытые элементы
// В JS-правиле:
let hiddenCount = 0;
window.JZ_HIDDEN_SPONSORED = () => {
JUSTZIX.log(`[${location.hostname}] Число скрытых спонсированных: ${hiddenCount}`);
};
// Инкрементируй при каждом .style.display = 'none': hiddenCount++;
// Вызывай из JS Console: JZ_HIDDEN_SPONSORED()
Ловушки
- Селекторы меняются. Соцсети часто реорганизуют DOM, чтобы усложнить блокировку. Тестируй правила каждый месяц.
- Текстовое совпадение хрупко для i18n. «Promoted» / «Sponsored» / «Реклама» / «Продвигается» — разные языки. Добавь дизъюнкцию regex.
- MutationObserver дорог на больших лентах. Троттли observer (debounce setTimeout 200 мс), если FPS падает.
- :has-text() не стандартный CSS. JustZix его поддерживает. В нативном CSS используй :has(div:contains(...)) (тоже нестандартный) или JS-observer.
Что делать дальше
- Скрытие cookie-баннеров — родственный паттерн
- Кастомизация ИИ-чат-приложений — паттерн CSS + JS-observer
- TOGGLE3 — трёхпозиционный селектор защиты
Установи JustZix и верни 30% своей ленты органическому контенту.
Оцени эту статью
Оценок пока нет — оцени первым.