Instagram sta usando il metodo linkState
da ReactLink:
http://facebook.github.io/react/docs/two-way-binding-helpers.html
I collegamenti pagina di login per un bundles/Login.js
che contiene il codice compresso in questo modo:
o.createElement("input", {
className:"lfFieldInput",
type:"text",
name:"username",
maxLength:30,
autoCapitalize:!1,
autoCorrect:!1,
valueLink:this.linkState("username")
}))
Se si guarda la documentazione per ReactLink, questo significa che il valore del campo di input viene inviato nuovamente allo stato quando l'evento change viene attivato sui campi di input. Tuttavia, non è così semplice come l'attivazione dell'evento di modifica sul nodo in questione - penso a causa del modo in cui React normalizza gli eventi del browser. La documentazione reagiscono specificamente dicono che onChange in Reagire non è esattamente la stessa di onChange nel browser per vari motivi:
http://facebook.github.io/react/docs/dom-differences.html
fortuna nel vostro caso si utilizza Instagram reagire con Programmi relazionati incluso che consente di accedere a reagire TestUtils, in modo da poter fare:
var frm = window.frames[1].document.forms[0];
var fReact = window.frames[1].React;
fReact.addons.TestUtils.Simulate.change(frm.elements[0], {target: {value: 'qacitester' }});
fReact.addons.TestUtils.Simulate.change(frm.elements[1], {target: {value: 'qatester' }});
frm.elements[2].click();
Più documentazione qui:
http://facebook.github.io/react/docs/test-utils.html
Si noti che poiché il modulo di login stesso è in un iframe, è necessario utilizzare l'istanza di React da tale iframe altrimenti i TestUtils non saranno in grado di trovare i nodi correttamente.
Questo sarà solo funziona in situazioni in cui React Addons sono inclusi nella pagina. La normale build di Add-on di React richiederà un'altra soluzione. Tuttavia, se stai parlando specificamente di ReactLink, è comunque un addon, quindi non è un problema.
Come ho commentato la risposta di altri, ho usato jquery.autotype che spara praticamente tutto il eventi necessari e cerca di simulare il comportamento dell'utente che digita le lettere ma non riesco ancora a farlo funzionare. Ho bisogno di risolvere questo problema nel contesto di JS mentre sto automatizzando un wrapper di Chrome di terze parti che posso controllare solo tramite codice JS. – huseyint
@huseyint quindi sembra che il modulo sia in un iFrame. Ho aggiornato il mio codice con un hack molto hacky che sono riuscito a inviare il modulo con successo; probabilmente non realizzerà ciò che vuoi fare programmaticamente, ma è un inizio :) –
lol, grazie per lo sforzo, ma sto cercando una soluzione JS pura :) – huseyint