Я пишу расширение Chrome для Facebook и хочу программным образом инициировать отправку сфокусированного комментария на пост. Поведение по умолчанию заключается в том, чтобы отправить, когда пользователь нажимает клавишу Enter, поэтому я пытаюсь обмануть пользовательский интерфейс Facebook, думая, что пользователь сделал это.Triggering Synthetic Event in React App
Facebook использует React и contenteditable
div для комментариев.
Вот набор вещей, которые я пробовал:
1) JQuery событие запуска $('<the contenteditable div>').trigger($.Event('keydown', {which: 13}))
- Я попытался это как из среды контент-сценариев и реальной среде страницы (с помощью как вложенный сценарий, реагирующий на
postMessage
, так и на консоль Chrome) - Я также попытался запустить событие на
document
из каждого контекста. - Ничего похожего не происходит.
2) То же самое, но с запуском события VanillaJS. relevant StackOverflow question
- также с обеих средах
- Ничего не происходит
3) В этот момент я понял, что это React, и он использует свой собственный SyntheticEvents
, поэтому я в основном копировать/вставить в Simulate
function from ReactTestUtils
, который предположительно чтобы помочь тестировать, моделируя события и запуская их в среде страницы (захватывая ссылки на объекты required
через интерфейс Facebook require
).
- Также не работает. Функция выполняется полностью и без ошибок, но ответа от приложения нет.
Я пробовал это в основном с keydown
событиями, потому что к нему прислушивается большинство слушателей.
Я в курсе этих вопросов, но они не помогли моему пониманию: Force React to fire event through injected JavaScript
Вы пытаетесь изменить содержимое редактируемого div из событий клавиатуры? Не могли бы вы поделиться JSFiddle, показывающим вашу проблему? – Espen
Привет, Мэтт! Вы нашли способ инициировать события так, как реагирует React? – Sergio
У меня нет, извините! Я закончил тем, что отказался от этого направления и пошел с совершенно другим решением (требующим от пользователя ctrl/cmd-enter, который facebook интерпретирует как «ввести», но к которому у моего расширения может быть свой собственный обработчик, см. Https: // github. com/Shrugs/EMP/blob/master/app/scripts/contentscript.js для получения дополнительной информации) –