2016-02-12 12 views
9

Sto sviluppando un'estensione di Chrome, che consente all'utente di sostituire il testo del proprio messaggio di chat di Facebook prima che lo inviino.Imposta o sostituisci textContent nella chat di Facebook

Per esempio, se l'utente digita "Ciao a tutti", voglio permettere loro di sostituire il campo di chat in ingresso con "Ci ciao", e lasciarlo fino a all'utente di inviare l'alterata Messaggio.

Il problema è che io sono in grado di modificare il testo modificando l'attributo textContent dell'ingresso, ma il widget di chat non sapere del cambiamento, probabilmente perché gli eventi giusti non hanno licenziato, quindi quando premo Invio per inviare il messaggio modificato non succede nulla. Inoltre, non sono in grado di eliminare il testo modificato con il mouse o la tastiera.

Ho provato a simulare l'input da tastiera, ma senza successo. Sono aperto ad accettare una soluzione di lavoro che implichi ciò.

La mia domanda è, come posso sostituire il testo nel campo di immissione della chat in modo che il widget di chat lo rilevi e lo accetti?

Nota: Non sto utilizzando jQuery, quindi preferirei soluzioni che non lo usano.

+1

Non so se/come potreste collegarvi, ma Facebook sta usando React, che sta catturando gli eventi e l'HTML che vedete è l'output. –

+1

Ho speso * waaay * troppo a lungo cercando di capirlo. Non è impossibile, ma 1) è molto difficile e 2) Se Facebook cambia il loro codice, il tuo widget si romperà e 3) Se Facebook disattiva mai gli sviluppatori in produzione, non hai speranza. Fondamentalmente vuoi usare l'oggetto 'window .__ REACT_DEVTOOLS_GLOBAL_HOOK __. ReactDevtoolsAgent', l'istanza del componente di reazione è da qualche parte, ma è molto difficile da trovare. Posso trovare l'elemento DOM ma non l'istanza stessa. Una volta ottenuta l'istanza è possibile attivare l'evento onKeyPress o qualcosa del genere. È probabilmente un problema insormontabile. – EugeneZ

+0

@miniml Non ho facebook quindi dovrei faticare a vederlo per te ... c'è una specie di sandbox o ambiente JSFiddle che potrei provare? – Marvin

risposta

5

Dopo aver passato troppo tempo su questo ho finalmente capito che l'invio di un evento textInput all'elemento modificabile può cambiare il suo testo e attiverà tutti gli eventi React.js.

var setText = function(el, text) { 
    var te = document.createEvent('TextEvent'); 
    te.initTextEvent('textInput', true, true, window, text); 
    el.dispatchEvent(te); 
} 

avevo provato qualcosa di simile prima, ma ero l'invio dell'evento input, che a quanto pare non funziona in WebKit e Chrome.

Grazie a tutti coloro che hanno partecipato e hanno cercato di aiutare!

+0

grazie questo è utile, mi ero arreso per un po ' – r14n

Problemi correlati