Разблокируй копирование, выделение и правый клик на любой странице
Ты попадаешь на статью, хочешь скопировать абзац в свои заметки — и страница не даёт тебе выделить текст. Правый клик ничего не делает. Это не баг браузера, это намеренная блокировка в JavaScript страницы. Эта статья показывает, как снять её одним правилом JustZix.
Как страницы блокируют копирование
В HTML не существует никакого «режима только для чтения». Страница, блокирующая выделение, делает это двумя способами:
- CSS —
user-select: noneна текстовых элементах. - JavaScript — обработчики событий
copy,selectstart,contextmenu, вызывающиеpreventDefault().
Оба можно отменить, потому что оба выполняются в браузере — а ты полностью контролируешь свой браузер.
Это законно?
Да. Текст уже на твоём экране — страница тебе его прислала. Снятие блокировки копирования не обходит никакой защиты контента, потому что её нет; это просто UX-раздражитель. Авторское право на сам текст — другой вопрос — что ты делаешь со скопированным фрагментом, зависит от тебя.
Правило — CSS плюс JS
Задай URL-паттерн на надоедающую страницу (или * глобально). На вкладке JavaScript правила вставь:
['copy', 'cut', 'contextmenu', 'selectstart', 'dragstart']
.forEach(evt =>
document.addEventListener(evt, e => e.stopPropagation(), true)
);
const s = document.createElement('style');
s.textContent =
'*{user-select:text!important;-webkit-user-select:text!important}';
document.documentElement.appendChild(s);
Как это работает
stopPropagation в фазе capture
Третий аргумент addEventListener, установленный в true, указывает фазу capture. Наш слушатель ловит событие до того, как оно достигнет обработчика страницы, и вызывает stopPropagation() — распространение останавливается, и обработчик страницы (тот, что с preventDefault()) никогда не получает событие.
Внедрённый style
Второй блок добавляет CSS-правило с user-select: text !important. !important бьёт любой user-select: none страницы. Мы внедряем его из JS (а не как CSS правила), чтобы он попал в самый конец каскада и наверняка выиграл.
Вариант только-CSS
Если блокировка чисто CSS, JS не нужен — достаточно вкладки CSS правила:
* { user-select: text !important; -webkit-user-select: text !important; }
Попробуй сначала это. Если выделение всё ещё не работает, страница блокирует и в JS, и тебе нужна полная версия.
Ловушки
- Поля паролей. Некоторые страницы блокируют копирование полей
passwordнамеренно — эта блокировка может быть разумной, оставь её. - Контент, загруженный позже. Внедрённый
<style>покрывает и элементы, добавленные в DOM после запуска — работает на SPA. - Это не обходит пейвол. Разблокировка выделения раскрывает текст, который у тебя уже есть. Это не откроет контент, скрытый за логином.
Смотри также
- Примеры — этот и другие готовые сниппеты
- Кастомные горячие клавиши — ещё один паттерн слушателя событий
- Скрытие cookie-баннеров — CSS для навязчивых элементов
Установи JustZix — и копируй с каждой страницы, которая пытается тебе помешать.
Оцени эту статью
Оценок пока нет — оцени первым.