2013-06-29 8 views
0

Я пишу аддон 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, но имеет тот же результат.

Есть ли способ, которым я могу надежно генерировать события и выполнять все действия браузера?

ответ

0

Снова прочитайте значение возвращаемого значения, это правда, когда действие по умолчанию было не предотвращено.

+0

Спасибо. Я обновил свой вопрос на основе этой информации. Но основной вопрос по-прежнему остается, почему я не получаю поведение по умолчанию при перемещении курсора/каретки при создании событий, связанных со стрелками? –