- Вопрос или проблема
- Ответ или решение
- Как вставить текст в поля ввода, которые блокируют вставку в Google Chrome
- 1. Использование перетаскивания
- 2. Консоль браузера
- 3. Настройки Firefox
- 4. Расширения для Chrome
- 5. Использование скриптов и закладок
- 6. Эмуляция нажатия клавиш
- 7. Операции с полями readonly
- Заключение
Вопрос или проблема
На многих веб-страницах они блокируют копирование/вставку с помощью JavaScript.
Есть ли способ сделать такие элементы ввода работоспособными (например, включить копирование/вставку)?
Я использую Google Chrome.
Просто выделите текст и перетащите его в текстовое поле. Попробуйте здесь!
Это сработало для меня в Firefox и Chrome.
Нажмите F12 или откройте панель разработчика браузера и вставьте следующий код в консоль.
var allowPaste = function(e){
e.stopImmediatePropagation();
return true;
};
document.addEventListener('paste', allowPaste, true);
Если вы используете Firefox, я нашел следующее решение. Не уверен, какая минимальная версия требуется, однако.
- Перейдите к
about:config
- Поиск по
dom.event.clipboardevents.enabled
- Дважды щелкните, чтобы изменить значение на
false
Это позволило мне вставить текст сразу после изменения. Мне даже не пришлось перезапускать браузер.
Вот расширение с открытым исходным кодом для Chrome
https://chrome.google.com/webstore/detail/dont-fuck-with-paste/nkgllhigpcljnhoakjkgaieabnkmgdkb
Если вас интересует код https://github.com/jswanner/DontFuckWithPaste
Это хакерский способ и он не всегда будет работать, но часто просто установлен слушатель для CTRL+C / CTRL+V, и вы можете обойти это, используя CTRL+INS / SHIFT+INS вместо копирования / вставки.
Если они делают что-то глупое, например, используют Flash для записи пустой строки в буфер обмена в цикле (twitch), то вам не повезло.
Решил добавить свое решение к этому (создавая закладку, вдохновленную этим репозиторием и расширением https://github.com/jswanner/DontFuckWithPaste) Эта закладка также позволит копировать в документах, которые отключают это с помощью JavaScript.
javascript:(function(){
allowCopyAndPaste = function(e){
e.stopImmediatePropagation();
return true;
};
document.addEventListener('copy', allowCopyAndPaste, true);
document.addEventListener('paste', allowCopyAndPaste, true);
document.addEventListener('onpaste', allowCopyAndPaste, true);
})();
Легчайшее решение (с точки зрения удобства использования) для Google Chrome – это добавление расширения Allow Copy.
Вы можете просто отключить JavaScript на странице, используя простую закладку. От http://javascript.about.com/library/bldis.htm
Если вы создадите закладку, которая содержит следующий скрипт в качестве ссылки (или даже вставите этот код в адресную строку и нажмете Enter), то это уберет весь JavaScript с текущей страницы:
javascript:void(d=document);if(frames.length){alert('Скрипт%20не%20работает%20в%20фреймах');}else{while((el=d.getElementsByTagName('script')).length){el[0].parentNode.removeChild(el[0]);};onerror=function(){};d.close();}
Проблема, конечно, в том, что хотя вы теперь сможете вставлять в это текстовое поле, если форма использует JavaScript для отправки формы, то и это тоже не будет работать.
Здесь перечислены несколько решений для Windows. Это решение для рабочих столов Linux
. Подход остается тем же – эмулировать нажатия клавиш для содержимого буфера обмена.
Создайте shell-скрипт со следующими строками и свяжите его с последовательностью клавиш (например, Strl+Super+V):
#!/bin/sh
clip_text="$(xclip -o -sel clipboard)"
sleep 0.5
xdotool type --clearmodifiers --delay 200 "$clip_text"
Обе программы xclip
и xdotool
есть в любом репозитории дистрибутива Linux.
Для Windows я поддерживаю открытое приложение DevComrade, которое, среди прочего, имитирует ввод текста из текущего буфера обмена при нажатии Win+Ins. Отлично подходит для тех назойливых веб-сайтов и настольных приложений, которые вмешиваются в функцию вставки.
На Microsoft Windows я использую голосовую команду в Dragon NaturallySpeaking для вставки текста из буфера обмена в поля ввода, которые блокируют его вставку:
Sub Main
SendKeys Clipboard
Rem originalClipboard = Clipboard
Rem Clipboard("str(" & originalClipboard & ")")
Rem SendKeys "originalClipboard"
Rem Wait(1)
Rem Clipboard(originalClipboard)
End Sub
Я использовал это решение много лет с Dragon NaturallySpeaking 12.5 + Windows 7 + в основном Chrome, оно работает на всех веб-сайтах. Единственное ограничение – если скопированный текст очень длинный, в этом случае появляется следующее сообщение об ошибке:
Я никогда не беспокоился о том, чтобы улучшить скрипт для принятия очень длинного текстового ввода, так как поля, которые ожидают длинный текст ввода, практически всегда принимают копирование и вставку, но это должно быть просто, если потребуется.
https://github.com/tddschn/dont-fuck-with-paste
Я сделал скрипт, который использует pyautogui
для имитации вставки, что работает для текстовых полей в любом приложении, включая браузеры.
Вы можете установить инструмент с помощью pipx install dont-fuck-with-paste
и использовать программное обеспечение, такое как Alfred / Keyboard Maestro / Raycast для вызова имитации вставки, запустив dfwp
или ~/.local/bin/dfwp
.
На Windows вы можете использовать AutoHotkey
Синтаксис:
::whatever::
Send [....текст… Используйте {enter} для переноса строк]
return
Пример: Если вы введете xyz
, он напишет текст ниже (так, как если бы он был написан):
::xyz::
Send hi {enter} Это новая строка {enter}. Еще одна новая строка {enter} что угодно. {enter}
return
Если блокировка вызвана тем, что поле ввода имеет атрибут readonly
, вы можете использовать следующий скрипт Tampermonkey, чтобы удалить все эти атрибуты:
// ==UserScript==
// @name Удалить атрибут readonly
// @namespace http://tampermonkey.net/
// @version 2024-12-01
// @description попытка захватить мир!
// @author Вы
// @match https://mywebsite.it/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=mywebsite.it
// @grant none
// ==/UserScript==
(function() {
'use strict';
function removeReadOnly(element) {
element.removeAttribute("readonly");
for (const child of element.children) {
removeReadOnly(child);
}
}
removeReadOnly(document.documentElement);
})();
Ответ или решение
Как вставить текст в поля ввода, которые блокируют вставку в Google Chrome
На многих веб-страницах есть механизмы, которые блокируют возможность вставки текста в поля ввода с помощью JavaScript. Это может быть проблемой, особенно если вам нужно быстро заполнить формы или вставить текст. В этой статье мы рассмотрим несколько способов обойти такие блокировки и сделать процесс вставки текста более удобным.
1. Использование перетаскивания
Если вы хотите вставить текст в поле, попробуйте просто выделить текст и перетащить его в нужное поле. Это работает как в Google Chrome, так и в Firefox и может быть простым способом обойти блокировку вставки.
2. Консоль браузера
Откройте панель разработчика (нажмите F12) и введите следующий код в консоль:
var allowPaste = function(e) {
e.stopImmediatePropagation();
return true;
};
document.addEventListener('paste', allowPaste, true);
Этот код отключает блокировку событий вставки на текущей странице.
3. Настройки Firefox
Если вы используете Firefox, существует способ отключить блокировку вставки через настройки:
- Введите
about:config
в адресной строке. - Найдите
dom.event.clipboardevents.enabled
. - Установите значение
false
.
Эта настройка позволит вам вставлять текст без дополнительных действий.
4. Расширения для Chrome
Вы можете установить специальные расширения, чтобы упростить вставку текста. Например, расширение Dont Fuck With Paste позволяет обойти блокировки вставки с помощью одного клика.
5. Использование скриптов и закладок
Создайте закладку с кодом JavaScript, который отключает блокировки:
javascript:(function(){
var allowCopyAndPaste = function(e){
e.stopImmediatePropagation();
return true;
};
document.addEventListener('copy', allowCopyAndPaste, true);
document.addEventListener('paste', allowCopyAndPaste, true);
})();
При нажатии на эту закладку на странице код будет выполнен и позволит вставлять текст.
6. Эмуляция нажатия клавиш
Это решение подходит для пользователей Windows и Linux. Вы можете использовать AutoHotkey на Windows или написать shell-скрипт на Linux, который будет эмулировать нажатие клавиш для вставки текста из буфера обмена.
Пример скрипта на Linux:
#!/bin/sh
clip_text="$(xclip -o -sel clipboard)"
sleep 0.5
xdotool type --clearmodifiers --delay 200 "$clip_text"
7. Операции с полями readonly
Если поле имеет атрибут readonly
, можно использовать Tampermonkey для удаления этого атрибута. Убедитесь, что у вас установлен Tampermonkey, и используйте следующий скрипт:
// ==UserScript==
// @name Remove readonly attribute
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Удалить атрибут readonly с поля ввода
// @author Вы
// @match https://mywebsite.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
function removeReadOnly(element) {
element.removeAttribute("readonly");
for (const child of element.children) {
removeReadOnly(child);
}
}
removeReadOnly(document.documentElement);
})();
Этот скрипт удалит атрибут readonly
с полей ввода, что позволит вам вводить текст.
Заключение
Есть множество способов обойти блокировки вставки текста на веб-страницах. Использование перетаскивания, кода в консоли, настройка браузера или специальные расширения помогут вам работать более эффективно. Выбирайте методы, которые подходят именно вам, и работайте без лишних препятствий. Помните о необходимости уважать правила и условия сервиса, на котором вы работаете.