Firefox Addon dispatchEvent после XmlHttpRequest не работает - PullRequest
0 голосов
/ 13 января 2020

Я пишу Firefox аддон (мин. Версия 55) и хочу, чтобы мой контент-скрипт программно изменил несколько HTML входов (Frontend построен с vaadin). Для этого я использовал elem.value = "sth", и поскольку эти входы имеют некоторые привязки, я также отправляю различные события, например, elem.dispatchEvent(new Event("paste")), чтобы вызвать их. Эти функции запускаются с помощью ярлыка, и пока он работает должным образом.

У моего аддона также есть всплывающее окно html, в котором я могу нажать кнопку, которая отправляет сообщение браузера browser.tabs.sendMessage(...), полученное в контентный скрипт через browser.runtime.onMessage. Когда я получаю это сообщение, создается и отправляется запрос XMLHttpRequest.

Когда я пытаюсь изменить входы снова после запроса, dispatchEvent не работает. Возвращает true, но не влияет на входные данные, например, я ожидаю, что выпадающий список появится после отправки «paste».

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

Моим первым предположением было то, что XMLHttpRequest изменил некоторые свойства обработки запроса или контекста, но раскрытие могло быть вызвано elem.dispatchEvent(new KeyboardEvent("keyup")) на входе, и это сработало. Для других случаев, таких как отправка «изменений», нет никакого возможного обходного пути (он работает из консоли браузера, хотя), и даже если бы я был рад советам, почему это вообще происходит в первую очередь.

РЕДАКТИРОВАТЬ 1 Я обнаружил, что для большинства событий я использовал неправильный интерфейс, например, для «вставки» я должен использовать elem.dispatchEvent(new ClipboardEvent("paste")), а не elem.dispatchEvent(new Event("paste")). Он работает с правильным интерфейсом, но все же у меня возникают проблемы с отправкой событий, связанных только с интерфейсом событий, например, «изменение» (https://developer.mozilla.org/de/docs/Web/Events/change).

...