从Chrome扩展程序触发本机键盘事件

时间:2012-09-17 13:07:54

标签: javascript dom javascript-events google-chrome-extension

Facebook有textarea的地方,他们扩展/缩小到其内部文本的大小。在我的Chrome扩展程序中,我将textarea中的文本更改为多行。但是,textareas扩展/收缩方法仅适用于键盘事件,因此我必须触发一个。

var event = document.createEvent('KeyboardEvent');

event.initEvent('keyup', true, true, window, false, false, false, false, 38, 38);
this.dispatchEvent(event); // this is the textarea

(它适用于所有keyup,keydown,keypress)

但这不起作用。现在,我知道为什么它不起作用,但不知道如何解决它。我已经为元素附加了一个处理程序,以查看发生了什么:

$('[role=dialog] .MessagingComposerForm textarea').on('keyup', function(e) {
    console.log(e);
});

当Chrome扩展程序触发其keyup事件时,我在控制台中可以看到的对象是一个普通的Event对象,除了两件事:keyCode = 0和view = null。

当我通过敲击键盘上的键来触发键盘事件时,我可以看到keyCode = 38和view = Window。

有没有人知道如何做到这一点?

增加:

我发现了一些东西。如果我在调度事件之前控制它事件,它仍然不包含正确的信息。这里:

var event = document.createEvent('KeyboardEvent');

event.initKeyboardEvent('keydown', true, true, window, false, false, false, false, 65, 65);
event.keyCode = 65;
event.which = 65;
event.charCode = 65;

console.log(event);

this.dispatchEvent(event); // this is the textarea

推出这个对象:

KeyboardEvent: {
    ...
    charCode: 0,
    keyCode: 0,
    view: Window,
    which: 0
}

1 个答案:

答案 0 :(得分:0)

这是WebKit中的一个错误:https://bugs.webkit.org/show_bug.cgi?id=16735

30char