0

我正在编写一个 Firefox 插件,并且需要以编程方式生成键事件,并让浏览器执行所有操作,就像用户输入这些键一样。

我正在尝试使用 DOMWindowUtils ( https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDOMWindowUtils ) 的 sendKeyEvent。我发现了以下问题:

如果我在 contentEditable 字段中生成左箭头/右箭头之类的事件,则浏览器不会更改光标位置。为什么?(注意:如果我为 'a'、'b'、... 等字符生成事件,那么浏览器会适当地更新 contentEditable 区域内的文本,因此我的代码中没有明显的缺陷)。对于非 contentEditable 字段,它的行为符合预期。

可以在 Tools->Web Developer->Scratchpad 中执行的示例代码,环境为“浏览器”(代码需要 chrome 权限)。

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但显示相同的结果。

有没有办法可以可靠地生成事件并让浏览器执行所有操作?

4

1 回答 1

0

再读一遍返回值的意思,在没有阻止默认动作的情况下为真。

于 2013-06-30T10:23:59.953 回答