Я пишу аддон Firefox и имею необходимость программно генерировать ключевые события, и браузер выполняет все действия, которые он будет делать, как если бы пользователь вводил эти ключи.Firefox addon: DOMWindowUtils.sendKeyEvent misbehaving
Я пытаюсь использовать DOMWindowUtils (https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDOMWindowUtils) 's sendKeyEvent. Я нашел следующую проблему:
Если я создаю такие события, как стрелка влево/вправо, в пределах разрешенных пользователем полей, браузер не меняет позицию курсора. Зачем? (Примечание. Если я генерирую события для таких символов, как «a», «b», ... затем браузер соответствующим образом обновляет текст в области contentEditable, поэтому в моем коде нет очевидных недостатков). Для полей, отличных от contentEditable, он ведет себя так, как ожидалось.
Пример кода, который может быть выполнен в Tools-> Web Developer-> Scratchpad, с окружением «Браузер» (для этого требуется хром-привилегия).
var doc = gBrowser.contentDocument,
win = doc.defaultView;
var domWindowUtils = win.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindowUtils);
var div = doc.getElementById('contentEditableDiv');
div.focus();
['keydown', 'keypress', 'keyup'].forEach(function(type) {
// if I generate characters like 'a', 'b' they work
// domWindowUtils.sendKeyEvent(type, 65, 97, 0, 0);
// 37 is left arrow, 38 right arrow
domWindowUtils.sendKeyEvent(type, 37, 0, 0, 0);
});
Я попытался с помощью initEvent/dispatchEvent
, но имеет тот же результат.
Есть ли способ, которым я могу надежно генерировать события и выполнять все действия браузера?
Спасибо. Я обновил свой вопрос на основе этой информации. Но основной вопрос по-прежнему остается, почему я не получаю поведение по умолчанию при перемещении курсора/каретки при создании событий, связанных со стрелками? –