Не удается вставить текст в поле сообщения на messenger.com - PullRequest
0 голосов
/ 15 апреля 2020

Это не один из тех вопросов «как вставить текст во входные данные». Я проверил их все.

Так что мне нужно вставить какой-нибудь текст при загрузке страницы в поле сообщения на message.com.

Проблема в том, что, хотя вход пуст, он просто элемент <br data-text="true">. Затем, если вы введете что-то, оно изменится на <span data-text="true"></span>. Это делает React.

Я могу добавить текст к innerHTML или textContent этого диапазона, но для того, чтобы появился тег, мне все равно нужно вручную ввести одну букву в поле сообщения. Если я попытаюсь изменить innerHtml или textContent на элементе br, ничего не произойдет.

Я попытался selection и range:

let selection = window.getSelection();
let range = selection.getRangeAt(0);
let node = document.createTextNode(text)
range.insertNode(node);`

, это вроде работает, в способ, которым я просто вставляю новый textnode, но я не могу отправить этот текст, поэтому он бесполезен. Я потратил на это целый день, и теперь я даже не уверен, возможно ли это.

1 Ответ

0 голосов
/ 16 апреля 2020

ОК, так что для всех, кто сталкивается с чем-то похожим, когда вы просто не можете изменить DOM напрямую, как показывают все ответы на подобные проблемы, вот мое решение. Это так просто.

Вы можете использовать clipboard API. Сначала вы добавляете текст в буфер обмена с помощью: navigator.clipboard.writeText('text')
Возвращает обещание, если оно вам нужно. Затем вы вставляете текст в позиции курсора с помощью document.execCommand('paste');

И это все! В моем случае, так как это было частью моего chrome расширения, мне также нужно было ввести ключ permissions в manifest.json следующие разрешения: "clipboardRead", "clipboardWrite"
Удачи!

PS Как я вижу, это новая функция, которая недоступна в IE и Safary.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...