суббота, 7 апреля 2018 г.

Убираем баннеры Яндекс Дзен

Как и обещал , будем делать расширение для браузера и блокировать Яндекс Дзен.

Зачем?

Просто покажу.
Вот так выглядит один информационный сайт без блокировщика рекламы:


Информационная помойка. Больше баннеров не нужно. Нет, серьёзно. Ещё только дзена там не хватало. 

Отказ от "услуг" зена разработчики забыли реализовать, поэтому нам с тобою, дорогой читатель, придётся сделать всё своими руками. Fight for your rights, камрад! Благо, дел там на две строки кода.

Делаем расширение, как описано ранее. Теперь рассмотрим два случая: когда зен "у себя дома", т.е. на страницах Яндекса, и когда он на других сайтах. Открываем отладчик по F12 и всё видим.

Всё проще некуда. Лента зена грузится скриптом с определённого домена. Мы просто заблокируем любой запрос к доменам прямо в браузере. Заодно и трафик экономим!

Пишем в background.js :

function block_url_req(details){
return {
cancel: true
};
}

//домены, с которых лезет зен
var adr  = ["https://zen.yandex.ru/widget-loader", "http://zen.yandex.ru/widget-loader", "https://yastatic.net/*/zen-lib*", "http://zen.yandex.ru/*", "https://zen.yandex.ru/*"];

//что делаем
var opt_extraInfoSpec = ["blocking"];

//ждём запросов
chrome.webRequest.onBeforeRequest.addListener(block_url_req, {urls: adr}, opt_extraInfoSpec);

Это практически всё. Если лента всё же пролезет, просто скроем её. 

Добавим в client.js :

var loginTimer;

//обходим div'ы, ищём зен. Ставим свойство "не показывать" и высоту 0 пикселей
function doact(){
if (loginTimer) {
window.clearTimeout(loginTimer);
}

var zendiv = document.getElementsByClassName('infinity-zen');
for (var i = 0; i != zendiv.length; ++i) {
zendiv[i].style.visibility = "hidden";
zendiv[i].style.height = "0px";
}
var zendiv = document.getElementsByClassName('zen-widget');
for (var i = 0; i != zendiv.length; ++i) {
zendiv[i].style.visibility = "hidden";
zendiv[i].style.height = "0px";
}
var zendiv = document.getElementsByClassName('article__dzen');
for (var i = 0; i != zendiv.length; ++i) {
zendiv[i].style.visibility = "hidden";
zendiv[i].style.height = "0px";
}
}

//ждём конца загрузки страницы
window.addEventListener("load", doact() );
window.addEventListener("onload", doact() );
document.addEventListener("DOMContentLoaded", doact());


Вот и всё. Полный код расширения тут: https://github.com/automatize-it/Chrome_extension_block_yandex_zen
Готовые расширения
для Chrome https://chrome.google.com/webstore/detail/block-yandex-zen
для Firefox https://addons.mozilla.org/ru/firefox/addon/block-yandex-zen

P.S. На главной Яндекса есть, оказывается, очень бледная, но всё же кнопка отключения:

2 комментария: