← Все статьи

Туториалы

Разблокируйте копирование, выделение и правый клик на любой странице

Удивительное число сайтов всё ещё пытаются «защитить» свой контент, отключая выделение текста, команду копирования и меню правого клика. Это редко останавливает решительного человека, но постоянно раздражает тех, кто просто хочет ухватить цитату или номер телефона. С JustZix вы можете снова включить всё это за секунды.

Почему страницы блокируют копирование

Сайты отключают копирование и выделение тремя распространёнными способами: CSS-правилом (user-select: none), слушателями событий JavaScript, вызывающими preventDefault() на copy, selectstart и contextmenu, а иногда прозрачным оверлеем поверх текста. JustZix позволяет обезвредить каждый слой, потому что ваше правило работает в странице, и вы контролируете и CSS, и JS.

Шаг 1: принудительно вернуть выделение через CSS

Создайте CSS-правило в JustZix, сопоставленное с сайтом (или с * для всего), и вставьте это. Флаг !important переопределяет собственную таблицу стилей сайта.

* {
  -webkit-user-select: text !important;
  -moz-user-select: text !important;
  user-select: text !important;
  cursor: auto !important;
}

Уже это одно чинит большинство случаев «не могу выделить текст». Если страница всё ещё сопротивляется, блокировка идёт от JavaScript.

Шаг 2: остановите обработчики JavaScript

Добавьте JS-правило для того же URL. Хитрость в том, чтобы регистрировать ваши слушатели в фазе захвата (третий аргумент true), чтобы они срабатывали раньше обработчиков сайта, затем вызывать stopImmediatePropagation(), чтобы блокирующий код сайта вообще не запускался.

['copy', 'cut', 'paste', 'selectstart', 'contextmenu', 'mousedown'].forEach(function (type) {
  document.addEventListener(type, function (e) {
    e.stopImmediatePropagation();
  }, true);
});

JustZix запускает ваш JS один раз за загрузку страницы, так что это привязывается рано и покрывает весь документ. Поскольку вы только останавливаете распространение, поведение браузера по умолчанию (собственно копирование, собственно показ меню) по-прежнему работает.

Шаг 3: очистите встроенные обработчики

Некоторые страницы задают oncontextmenu="return false" прямо на элементе <body>. Слушатели фазы захвата не всегда бьют встроенные атрибуты, так что сотрите и их. Этот сниппет защитный: он проверяет существование элемента, прежде чем его трогать.

var targets = [document.body, document.documentElement];
targets.forEach(function (el) {
  if (!el) return;
  el.oncontextmenu = null;
  el.oncopy = null;
  el.onselectstart = null;
  el.ondragstart = null;
});

Собираем всё вместе

Для упрямого сайта используйте все три: CSS-правило плюс одно JS-правило, объединяющее шаги 2 и 3. Объединённое JS-правило выглядит так:

['copy', 'cut', 'paste', 'selectstart', 'contextmenu', 'mousedown', 'dragstart'].forEach(function (type) {
  document.addEventListener(type, function (e) {
    e.stopImmediatePropagation();
  }, true);
});

var el = document.body;
if (el) {
  el.oncontextmenu = null;
  el.oncopy = null;
  el.onselectstart = null;
}

Когда текст внутри оверлея

Если вы видите текст, но выделение хватает пустую коробку, сверху сидит невидимый элемент. Найдите его в DevTools и отключите события указателя через CSS:

.paywall-overlay,
.copy-guard,
[class*="overlay"] {
  pointer-events: none !important;
}

Будьте осторожны с широкими селекторами вроде [class*="overlay"] — они могут отключить нужные вам кнопки. Предпочтите точное имя класса, когда вы его определили.

Советы для надёжных правил

Просмотрите готовые примеры ради версии этого правила в один клик, а если вы ещё не установили его, скачайте JustZix для Chrome, Firefox, Edge или Opera. Когда копирование снова заработает, вы, возможно, захотите прочесть нашу сопутствующую статью об автоматическом принятии cookie-баннеров.

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

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

Попробуй сам

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

Получить JustZix

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