Как вставить текст в поля ввода, которые это блокируют?

Вопрос или проблема

На многих веб-страницах они блокируют копирование/вставку с помощью JavaScript.

Есть ли способ сделать такие элементы ввода работоспособными (например, включить копирование/вставку)?

Я использую Google Chrome.

Просто выделите текст и перетащите его в текстовое поле. Попробуйте здесь!

Это сработало для меня в Firefox и Chrome.

Нажмите F12 или откройте панель разработчика браузера и вставьте следующий код в консоль.

var allowPaste = function(e){
  e.stopImmediatePropagation();
  return true;
};
document.addEventListener('paste', allowPaste, true);

Если вы используете Firefox, я нашел следующее решение. Не уверен, какая минимальная версия требуется, однако.

  1. Перейдите к about:config
  2. Поиск по dom.event.clipboardevents.enabled
  3. Дважды щелкните, чтобы изменить значение на 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);
})();

AllowCopyAndPaste

Легчайшее решение (с точки зрения удобства использования) для 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, существует способ отключить блокировку вставки через настройки:

  1. Введите about:config в адресной строке.
  2. Найдите dom.event.clipboardevents.enabled.
  3. Установите значение 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 с полей ввода, что позволит вам вводить текст.

Заключение

Есть множество способов обойти блокировки вставки текста на веб-страницах. Использование перетаскивания, кода в консоли, настройка браузера или специальные расширения помогут вам работать более эффективно. Выбирайте методы, которые подходят именно вам, и работайте без лишних препятствий. Помните о необходимости уважать правила и условия сервиса, на котором вы работаете.

Оцените материал
Добавить комментарий

Капча загружается...