(Chrome расширение) Выполнить что-то из расширения перед страницей addEventListener - PullRequest
0 голосов
/ 15 января 2020

Я хочу добавить " HELLO" в окно сообщения перед отправкой сообщения (при нажатии введите ).

Пример:
Здесь я пытаюсь изменить все сообщение к (текущее сообщение + "HELLO") в окне сообщения, когда пользователь нажимает ENTER (клавиша возврата).

Код (пример для окна сообщения слабины):

document.querySelector('.ql-editor').addEventListener("keydown", async function(event) {

    if (event.keyCode === 13) {
        //Fetch current element with data
        var slackMessageField = document.querySelector('.ql-editor');

        event.preventDefault();

        textRightNow = slackMessageField.innerText;
        slackMessageField.innerText = (slackMessageField.innerText + " HELLO");
    }
});
slackMessageField = `<div class="ql-editor ql-blank" data-gramm="false" 
   contenteditable="true" id="undefined" dir="auto" role="textbox" tabindex="0"
   data-team-id="T9L8N47PZ" aria-label="Message #ipnmod"
   aria-describedby="context-bar-text" aria-multiline="true"
   aria-autocomplete="list" aria-expanded="false"
   aria-owns="chat_input_tab_ui" spellcheck="true"><p><br></p></div>`

, где пользователь вводит сообщение.

Проблема:
Slack отправляет обычное сообщение перед добавлением «HELLO», а также не удается извлечь текущий innerText (textRightNow ). Таким образом, мы получаем «(EMPTY SPACE) HELLO» в окне сообщения вместо добавления «HELLO».

Ответы [ 2 ]

1 голос
/ 15 января 2020

Поведение может происходить только потому, что элемент slackMessageField не имеет никакого текста внутри и, следовательно, slackMessageField.innerText не получает никакого текста. Если вам случится запускать одно и то же событие снова и снова, <space>Hello будет объединяться каждый раз. Убедитесь, что вы добавили искомый текст в целевой элемент. Например:

document.querySelector('.ql-editor').addEventListener("keydown", async function(event) {
  if (event.keyCode === 13) {
    //Fetch current element with data
    var slackMessageField = document.querySelector('.ql-editor');

    event.preventDefault();

    textRightNow = slackMessageField.innerText;
    slackMessageField.innerText = (slackMessageField.innerText + " HELLO");
  }
});
.ql-editor {
  border: 1px solid #000;
  padding: 5px;
}
<label>Press Enter:</label>
<div class="ql-editor ql-blank" data-gramm="false" contenteditable="true" id="undefined" dir="auto" role="textbox" tabindex="0" data-team-id="T9L8N47PZ" aria-label="Message #ipnmod" aria-describedby="context-bar-text" aria-multiline="true" aria-autocomplete="list"
  aria-expanded="false" aria-owns="chat_input_tab_ui" spellcheck="true">
  Lorem Ipsum
</div>

В приведенном выше примере, когда срабатывает событие keydown, внутри элемента slackMessageField будет некоторый существующий текст, и, следовательно, результат будет показать как Lorem Ipsum HELLO после того, как событие сработало.

0 голосов
/ 15 января 2020

Нет способа сделать это. Сайт запускает скрипт, перед которым очищается окно сообщения. Мне придется сохранять содержимое окна сообщения каждый раз, когда оно меняется.

...