开发者

Why my dispatchEvent works for mouse events but not key events

I am thinking about making a Firefox add-on of my own and doing some experiments for the functionality I might be adding in it.

As I am just checking the feasibility of things for now, I just got a skeleton created from Mozilla add-on builder and started working in it. What I am trying right now is to send mouse click or key press events.

I have tried the available ways to send event but somehow it's not working for key events

I tried it using dispatchEvent:

onMenuItemCommand: function(e) {  

    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');


    var evt1 = document.createEvent("MouseEvents");
    evt1.initMouseEvent("click", true, true, window,
        0, 0, 0, 0, 0, false, false, false, false, 0, null);

    //it's returning me null for document.getElementById... so I changed it.
    var cb1 =  gBrowser.selectedBrowser.contentDocument.getElementById("strict");
    var canceled1 = !cb1.dispatchEvent(evt1);


    var evt = document.createEvent("KeyEvents");
    evt.initKeyEvent("keydown", true, false, window,
                 false, false, false, false, 0x42, 0);
    var cb =  gBrowser.selectedBrowser.contentDocument.getElementById("filter"); 
    var canceled = !cb.dispatchEvent(evt);
    if(canceled) 
    {
        // A handler called preventDefault
        alert("canceled");
    } 
    else 
    {
        // None of the handlers called preventDefault
        alert("not canceled");
    }       
}   

When I tried this code in Firefox, it did updated the checkbox which means click event worked, but nothing happened in textbox where I was expecting it to print a character. But it showed alert box with "not Cancelled" proving that event was not cancelled!

As event was not cancelled, I decided to put a keypressed handler on window.document... and it got invoked when add-on send these events! Which me开发者_如何转开发ans the events are getting generated and are bubbling as well.

Then why only mouse events are working and key events are not? Am I missing something here?

(I have also tried sendKeyEvent with nsIDOMWindowUtils. still had no luck with it.)

btw, I am using Firefox 3.6.15 with Gecko :1.9.2.15


You have to focus the element before you can dispatch a key event to it.

EDIT:

This is only true for web pages. Extensions can dispatch keypress events to any text field.

EDIT:

Text entry is done via keypress events, not keydown events.

EDIT:

You won't get any characters inserted if you don't provide a character code. (Sorry for overlooking that, it should have been obvious.) Also although it seems to work with your window you should pass in the browser's contentWindow as the defaultView.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜