Các hộp bình luận hiện nay không phải là một truyền thống <textarea>
bên trong một <form>
. Họ đang sử dụng thuộc tính có thể chỉnh sửa được trên div. Để nộp trong trường hợp này, bạn muốn nghe một trong những sự kiện bàn phím (keydown
, keypress
, keyup
) và tìm kiếm chìa khóa Enter
đó là keycode 13.
Hình như FB được nghe keydown
evt trong trường hợp này, vì vậy khi tôi chạy mã này tôi đã có thể giả mạo gửi một bình luận:
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'));
Một vài điều cần lưu ý về điều này. Lớp học ._54-z
là một lớp học mà họ vừa mới sử dụng trên trang của tôi. Số dặm của bạn có thể thay đổi. Sử dụng công cụ dev để đảm bảo bạn lấy đúng phần tử (cần có vai trò aria "combobox"). Ngoài ra, nếu bạn đang tìm kiếm để hỗ trợ các trình duyệt cũ hơn, bạn sẽ phải tinh chỉnh mã chức năng fireEvent
ở trên. Tôi chỉ thử nghiệm ví dụ trên trong Chrome mới nhất.
Cuối cùng, để làm phức tạp các vấn đề về phía bạn, Facebook đang sử dụng React để tạo ra một đại diện DOM ảo của trang hiện tại. Nếu bạn nhập thủ công các ký tự vào hộp tổ hợp và sau đó chạy mã ở trên, nó sẽ hoạt động như mong đợi. Nhưng bạn sẽ không thể thiết lập nội bộ của bên trong của combobox ở trên cùng của <span>
về những gì bạn đang tìm kiếm và sau đó kích hoạt keydown
. Bạn có thể cần phải kích hoạt sự kiện change
trên combobox để đảm bảo thư của bạn vẫn tiếp tục với Virtual DOM.
Điều đó sẽ giúp bạn bắt đầu! Hy vọng rằng sẽ giúp!
Nguồn
2015-07-02 14:46:20
bạn đã thử kích hoạt sự kiện gửi? – BoatCode
@BoatCode yes Tôi đã thử –
Mã của bạn mà bạn _tried_ ở đâu? –