Gli attuali caselle di commento non sono una tradizionale <textarea>
all'interno di una <form>
. Stanno usando l'attributo contenteditable su un div. Al fine di presentare in questo scenario, che ci si vuole ascoltare uno degli eventi della tastiera (keydown
, keypress
, keyup
) e cercare la chiave Enter
che è keycode 13.
Sembra che FB è l'ascolto della keydown
EVT in questo caso, così quando mi sono imbattuto questo codice sono stato in grado di falsificare inviare un commento:
function fireEvent(type, element) {
var evt;
if(document.createEvent) {
evt = document.createEvent("HTMLEvents");
evt.initEvent(type, true, true);
} else {
evt = document.createEventObject();
evt.eventType = type;
}
evt.eventName = type;
evt.keyCode = 13;
evt.which = 13;
if(document.createEvent) {
element.dispatchEvent(evt);
} else {
element.fireEvent("on" + evt.eventType, evt);
}
}
fireEvent('keydown', document.querySelector('[role="combobox"]._54-z span span'));
un paio di cose da notare in questo. La classe ._54-z
era una classe che si erano appena potuti usare sulla mia pagina. Il tuo chilometraggio può variare. Usa gli strumenti di sviluppo per assicurarti di afferrare l'elemento giusto (dovrebbe avere il ruolo di aria "combobox"). Inoltre, se stai cercando di supportare i browser più vecchi, dovrai modificare il codice della funzione fireEvent
in alto. Ho testato solo l'esempio precedente nell'ultimo Chrome.
Infine, per complicare le cose da capo, Facebook sta usando React che crea una rappresentazione DOM virtuale della pagina corrente. Se stai digitando manualmente i caratteri nella casella combinata e poi esegui il codice sopra, funzionerà come previsto. Ma non sarai in grado di impostare la innerHTML di <span>
interna più vicina a quello che stai cercando di fare e quindi attivare keydown
. Probabilmente dovrai attivare l'evento change
nella casella combinata per assicurarti che il tuo messaggio rimanga sul Virtual DOM.
Questo dovrebbe iniziare! Spero possa aiutare!
fonte
2015-07-02 14:46:20
hai provato a attivare un evento di invio? – BoatCode
@BoatCode si ho provato –
Dov'è il tuo codice che hai _tried_? –