← Все статьи

Туториалы

Устраните всплывающие окна рассылок и регистрации до их появления

Вы прочли три абзаца статьи, и тут поверх экрана выезжает окошко, выпрашивающее ваш email. Всплывающие окна рассылок — самое предсказуемое прерывание в вебе и самое простое для устранения навсегда.

Как работают всплывающие окна регистрации

Большинство всплывающих окон срабатывают одним из трёх способов: после задержки, после прокрутки на определённое расстояние или по «exit intent», когда курсор устремляется к панели вкладок. Каким бы ни был триггер, результат — один и тот же элемент DOM: модальный контейнер плюс тёмная подложка. Скройте оба — и прерывание исчезнет.

Рецепт 1: скрыть распространённые модальные контейнеры

Виджеты всплывающих окон переиспользуют небольшой набор имён классов. Это правило за один проход покрывает крупные из них и подложку.

/* Очистка модальных окон рассылок / регистрации */
[class*="newsletter"], [class*="signup-modal"],
[class*="email-capture"], [class*="subscribe-popup"],
[id*="popup"], [class*="popup-overlay"],
.modal[role="dialog"] {
  display: none !important;
  visibility: hidden !important;
}

/* Снова включить страницу за модальным окном */
body {
  overflow: auto !important;
  padding-right: 0 !important;
}

Тот padding-right: 0 важен: многие скрипты модальных окон добавляют правый отступ к body, компенсируя скрытую полосу прокрутки, и после исчезновения модалки остаётся уродливый зазор.

Рецепт 2: победить оверлеи exit-intent

Всплывающие окна exit-intent отслеживают уход мыши за пределы окна. Они почти всегда живут в фиксированном полноэкранном контейнере с очень высоким z-index. Нацеливаться можно по этой сигнатуре.

/* Всё фиксированное и полноэкранное поверх страницы */
div[style*="position: fixed"][style*="z-index"] {
  display: none !important;
}

/* Распространённые имена классов exit-intent */
[class*="exit-intent"], [class*="exit-popup"],
[data-popup-trigger="exit"] {
  display: none !important;
}

Используйте первый селектор осторожно — некоторые сайты помещают полезный интерфейс в фиксированные контейнеры. Если страница сломалась, сузьте правило только до этого домена.

Рецепт 3: JS-правило, блокирующее всплывающие окна у источника

CSS скрывает всплывающие окна после их отрисовки. JavaScript может вообще не дать им отрисоваться, обезвредив таймеры и слушатели прокрутки, которые их запускают.

// Отключить таймерные окна, блокируя долгие таймауты
const realTimeout = window.setTimeout;
window.setTimeout = function (fn, delay, ...rest) {
  if (delay > 1500) return 0;          // пропускать подозрительно долгие задержки
  return realTimeout(fn, delay, ...rest);
};

// Удалять модалки, которые всё же проскользнули
new MutationObserver(() => {
  document.querySelectorAll('[class*="modal"], [class*="popup"]')
    .forEach(el => {
      if (el.offsetHeight > 100 && el.offsetHeight < 700) {
        el.remove();
      }
    });
}).observe(document.documentElement, { childList: true, subtree: true });

Блокировка таймаутов дольше 1,5 секунд убивает большинство отложенных всплывающих окон, не трогая обычные анимации страницы. Подстройте порог, если сайт полагается на медленные таймеры.

Рецепт 4: не дать странице блокироваться

Даже когда всплывающее окно скрыто, некоторые скрипты замораживают прокрутку, добавляя класс к элементу <html>. Снимите его и восстановите движение.

// Принудительно разблокировать прокрутку
const html = document.documentElement;
['no-scroll', 'modal-open', 'overflow-hidden', 'fixed'].forEach(c => {
  html.classList.remove(c);
  document.body.classList.remove(c);
});
document.body.style.overflow = 'auto';

Настройте один раз, просматривайте везде

Применяйте CSS-рецепты с широким шаблоном URL вроде *://*/* и держите JS-правило для тех немногих сайтов, которым нужна дополнительная сила. Поскольку JustZix запускает ваши правила до того, как страница закончит отрисовку, хорошо сделанные всплывающие окна даже не мелькнут на экране.

Следующие шаги

Установите со страницы скачать JustZix и изучите каталог готовых примеров за другими сниппетами. Cookie-баннеры — близкий родственник всплывающих окон; уберите и их с нашим руководством на /ru/blog/hide-cookie-walls-and-consent-popups. С сохранёнными обоими правилами веб читается так, как должен: только контент.

Оцени эту статью

Оценок пока нет — оцени первым.

Попробуй сам

Установи JustZix и вставь любой сниппет из этой статьи. Две минуты от нуля до работающего правила на всех твоих устройствах.

Получить JustZix

Возможности · Как это работает · Примеры · Применение