Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Эмулировать событие event (https://javascript.ru/forum/events/51999-ehmulirovat-sobytie-event.html)

JIereHga2014 29.11.2014 17:15

Эмулировать событие event
 
Всем доброго времени суток ув. Форумчене :victory:
Впервые на Вашем форуме, прошу камнями не кидать, если что не так:stop:
:help: Нужна ваша помощь в следующем:help:
На странице ВК есть поле для вставки текста:
<textarea id="post_field" class="fl_l" onkeyup="Wall.postChanged()" onkeydown="onCtrlEnter(event, Wall.sendPost)" onfocus="Wall.showEditPost()" style="width: 369px; padding-right: 3px; overflow: hidden; resize: none; height: 11px;"></textarea>

Пишу скрипт на Autoit, который будет заполнять это поле:
Код:

$oIE = _IECreate ("http://vk.com/club46162850") ;<=== Создаем новую страницу IE и записываем Obj в переменную $oIE
$oPost = _IEGetObjById ($oIE,"post_field") ;<=== получаем Obj по ID "post_field"
_IEAction ($oPost,"focus") ;<==== Устанавливаем фокус на обьекте
_IEFormElementSetValue($oPost, "http://autoit-script.ru/") ;<==== устанавливаем новое значение

Так вот, заполнение как бы происходит, и даже можно нажать кнопочку отправить... Но, если это делать ручками а не через скрипт, то ВК открывает дополнительно окошко, в котором появляется ссылка на сайт с картинкой.
Предпологаю, что происходит так, из за обработчиков "onkeydown" и "onkeyup", ведь скрипт не сообщает что кнопки физически нажимались.

Вопрос, что передает Event "onkeydown" в функцию onCtrlEnter(event, Wall.sendPost), предпологаю, что key.code нажатой клавиши. И как эмулировать, заставить поверить страницу в том, что клавиша действительно была нажата. Достаточно одной клавиши {SPACE}. Подскажите пожалуйста, как это работает???:help: :help: :help: :help:

danik.js 29.11.2014 17:20

Не знаю насчет IE (кстати, какой версии?), но в FF можно так:

var event = new KeyboardEvent('keydown', {keyCode: 0x20});
element.dispatchEvent(event);

danik.js 29.11.2014 17:21

Посмотри сначала на странице какое событие прослушивается. Посмотреть можно в DevTools хрома.

JIereHga2014 29.11.2014 17:40

danik.js
Цитата:

Посмотри сначала на странице какое событие прослушивается. Посмотреть можно в DevTools хрома.
Подскажите пожалуйста, Вы это имеете ввиду??
Если да, помогите разобраться что тут к чему...:cray:
Цитата:

var event = new KeyboardEvent('keydown', {keyCode: 0x20});
element.dispatchEvent(event);
А вот это я отправил через js консоль и получил ответ:
var event = new KeyboardEvent('keydown', {keyCode: 0x20});
undefined
element.dispatchEvent(event);
VM1947:2 Uncaught ReferenceError: element is not definedmessage: "element is not defined"stack: (...)get stack: function () { [native code] }set stack: function () { [native code] }__proto__: ErrorVM1947:2 (anonymous function)VM1530:762 InjectedScript._evaluateOnVM1530:695 InjectedScript._evaluateAndWrapVM1530:609 InjectedScript.evaluate

Или я не так отправил??

danik.js 29.11.2014 17:49

Цитата:

Сообщение от JIereHga2014
, Вы это имеете ввиду??

Да, хотя в FF не проверял.
Цитата:

Сообщение от JIereHga2014
Или я не так отправил??

В element запиши свое поле ввода.

Кстати после фокуса оно становится активным элементом документа, то есть:
document.activeElement.dispatchEvent(...)

JIereHga2014 29.11.2014 18:16

Отправил:
var event = new KeyboardEvent('keydown', {keyCode: 0x20});
document.activeElement.dispatchEvent(event);

Получил:
true

Но изменений никаких не произошло :(

danik.js 30.11.2014 04:52

Значит скрипт не реагирует на keydown. Возможно на input или на keypress среагирует. Можешь поизучать код скрипта.


Часовой пояс GMT +3, время: 15:51.