Obecne komentarz skrzynki nie są tradycyjne <textarea>
wewnątrz <form>
. Korzystają z atrybutu contenteditable dla elementu div. W celu złożenia w tym scenariuszu, że chcesz słuchać jednego ze zdarzeń klawiaturowych (keydown
, keypress
, keyup
) i szukać klucza Enter
która keycode 13.
Wygląda na FB jest słuchanie keydown
evt w tym przypadku, więc kiedy uruchomiłem ten kod, udało mi się sfałszować, aby wysłać komentarz:
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'));
Kilka rzeczy o tym pamiętać. Klasa ._54-z
była klasą, której po prostu używali na mojej stronie. Twój przebieg może się różnić. Użyj narzędzi programistycznych, aby upewnić się, że złapiesz odpowiedni element (powinien on mieć rolę arii "combobox"). Ponadto, jeśli chcesz obsługiwać starsze przeglądarki, będziesz musiał poprawić powyższy kod funkcji fireEvent
. Testowałem tylko powyższy przykład w najnowszym Chrome.
Wreszcie, aby komplikować sprawy na końcu, Facebook używa React, który tworzy wirtualną reprezentację DOM dla bieżącej strony. Jeśli ręcznie wpisujesz znaki w combobox, a następnie uruchamiasz powyższy kod, działa on zgodnie z oczekiwaniami. Ale nie będziesz w stanie ustawić wewnętrznej strony HTML combobox do tego, czego szukasz, a następnie wyzwolisz keydown
. Prawdopodobnie będziesz musiał wywołać zdarzenie change
na combobox, aby upewnić się, że komunikat będzie się powtarzał w Virtual DOM.
To powinno wystartować! Mam nadzieję, że pomaga!
Czy próbowałeś wyzwalać zdarzenie submit? – BoatCode
@ BootCode Tak próbowałem –
Gdzie jest twój kod __ __? –