Sto scrivendo un'estensione Chrome per Facebook e desidero attivare a livello di codice la presentazione della bozza di commento focalizzata su un post. Il comportamento predefinito è di inviare quando l'utente preme il tasto Invio, quindi sto tentando di ingannare l'interfaccia utente di Facebook per pensare che l'utente lo abbia fatto.Attivazione evento sintetico nell'app React
Facebook utilizza React e un contenteditable
div per i moduli di commento.
Ecco una serie di cose che ho provato:
1) jQuery evento scatenante $('<the contenteditable div>').trigger($.Event('keydown', {which: 13}))
- Ho provato questo sia l'ambiente di contenuti-script e l'ambiente pagina reale (tramite sia uno script iniettato che risponde a
postMessage
e la console di Chrome) - Ho anche provato ad attivare l'evento su
document
, da ogni contesto. - Nulla sembra accadere.
2) Stessa cosa, ma con l'attivazione dell'evento di VanillaJS. relevant StackOverflow question
- anche da entrambi gli ambienti
- non succede nulla
3) A questo punto mi sono reso conto che questo è reagire e si utilizza il proprio SyntheticEvents
, così ho praticamente copia/incollato il Simulate
function from ReactTestUtils
che dovrebbe per aiutare i test simulando eventi ed eseguendoli all'interno dell'ambiente della pagina (afferrando i riferimenti agli oggetti required
tramite la funzione require
10 del frontend di Facebook).
- Inoltre, non funziona. La funzione viene eseguita completamente e senza errori, ma non c'è risposta dall'applicazione.
Ho provato questo principalmente con gli eventi keydown
, perché questo ha il maggior numero di listener collegati.
Sono consapevole di queste domande, ma non hanno aiutato la mia comprensione: Force React to fire event through injected JavaScript
Stai cercando di ottenere il contenuto del div modificabile da modificare dagli eventi della tastiera? Potresti condividere un JSFiddle che mostri il tuo problema? – Espen
Ciao Matt! Hai trovato un modo per attivare gli eventi in un modo che React ascolta? – Sergio
Non ho, mi dispiace! Ho finito per abbandonare questa direzione e andare con una soluzione leggermente diversa (richiedendo all'utente di ctrl/cmd-enter, che Facebook interpreta come "invio" ma a cui la mia estensione può avere il proprio gestore, vedi https: // github. com/Shrug/EMP/blob/master/app/scripts/contentscript.js per maggiori informazioni) –