Web сайты

Предложенный мной способ с помощью плагина Stylus и CSS не у всех работает, поэтому решил попробовать сделать тоже самое, но уже с помощью плагина Greasemonkey и javascript.
Получился вот такой код:

// ==UserScript==
// @name     Mail.ru adv
// @version  1
// @include <a href="https://e.mail.ru/*<br />
//" title="https://e.mail.ru/*<br />
//">https://e.mail.ru/*<br />
//</a> @run-at document-end
// @grant    none
// ==/UserScript==
 
 
(function(){
  'use strict';
 
 
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
 
// Выбираем целевой элемент
var target = document;
 
// Конфигурация observer (за какими изменениями наблюдать)
const config = {
    //attributes: true,
    childList: true,
    subtree: true
}; 
 
// Функция обратного вызова при срабатывании мутации
const callback = function(mutationsList, observer) {
  var advParent = target.getElementById('app-canvas');
  var advElement1 = advParent.children[0].children[0].children[0].children[0].children[1].childNodes[1];
  advElement1.style = 'margin-right: 0px;';
  var advElement2 = advParent.children[0].children[0].children[0].children[0].children[1].childNodes[2];
  advElement2.style = 'display: none;';
  let advElements = document.querySelectorAll('div[__mediators$="layout-manager"]');
  for (let elem of advElements) {
    elem.style = 'display: none;';
  }  
};
 
// Создаем экземпляр наблюдателя с указанной функцией обратного вызова
const observer = new MutationObserver(callback);
 
// Начинаем наблюдение за настроенными изменениями целевого элемента
observer.observe(target, config);
 
// Позже можно остановить наблюдение
//observer.disconnect();  
 
 
})();

Проблемы были две. Одна заключается в том, что имена стилей меняются при загрузке страницы, а вторая - это то, что данные, которые необходимо отфильтровать, загружаются после загрузки страницы и поэтому пришлось отлавливать события изменения содержимого страницы уже после ее загрузки.
Тестировал только у себя - работает. Но у меня работает и первый способ с помощью CSS, поэтому как данный метод отработает у других пока не знаю.

09.05.2020 Дополнил код, чтобы скрывалось рекламное окно после отправки письма.

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Спасибо, помогло, даже браузер перезагружать не пришлось. Правда я этот скрипт вставил в Tampermonkey, это аналог.

admin аватар

Спасибо за отзыв. Буду знать, что у кого-то тоже работает, а то я сомневался.

выдаёт какую-то ошибку в 13й строке

в этой:
MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
пишет
eslint: no-native- r eassign Read -only global ·MutationObserver' should not be
modified .

admin аватар

Попробуйте просто закоментировать эту строку.

всё равно не работает. может я что-то неправильно делаю...На вкладке "установленные скрипты" скрипт есть. Ползунок в позиции "включено". обновляю страницу мейла - ничего не происходит. В окошке tampermonkey написано "скрипт не запущен"

admin аватар

Я тестил на greasemonkey. Возможно, что для tampermonkey заголовок скрипта (все что между // ==UserScript==) будет другой.

в хорме нет greasemonkey. есть только tampermonkey

admin аватар

Видимо когда-то я в хроме тоже тренировался. Обнаружил, что у меня там установлен Violentmonkey. Зашел сейчас на mail.ru, нажал создать скрипт и вставил свой скрипт(кроме заголовка, заголовок оставил тот, что получился по умолчанию). Все работает. В хроме.

Скрипт отлично работает на Хроме через Violentmonkey. Но есть 2 момента, которые хотелось бы в нем видеть:
1. Он не блокирует верхнюю рекламную строчку, которая находиться над 1 письмом в любой папке.
2. Так как он, как я понимаю, блокирует всплывающие окна сайта, не работает кнопка очистки корзины в левом меню, т.к. при нажатии на нее, должно всплывать сообщение с подтверждением. ;-)

А так всё супер!

admin аватар

Спасибо за отзыв. Если руки дойдут, то может доделаю. Просто корзину не чищу никогда, поэтому даже не обратил на это внимание. А так да, похоже что любое мэйловское окно блокируется у меня. Вот этим куском кода:

 
let advElements = document.querySelectorAll('div[__mediators$="layout-manager"]');
  for (let elem of advElements) {
    elem.style = 'display: none;';
  }  

Поэтому либо это убрать, либо отключать плагин на время операций с всплывающим окном.

Спасибо автору за скрипт!
Не появилось ли решения чтобы убрать рекламу над первым письмом в списке?

admin аватар

Нет. В отличии от рекламы сбоку, это не сильно меня напрягает, поэтому и со скриптом не напрягался ради этого :)

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".