2

Facebookには、その中のテキストのサイズに拡大/縮小するtextareaがあります。Chrome拡張機能で、テキストエリア内のテキストを数行に変更します。ただし、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

(これは、キーアップ、キーダウン、キープレスのすべてに対して行われます)

しかし、これは機能しません。今、私はそれが機能しない理由を少し知っていますが、それを解決する方法はわかりません。何が起こっているかを確認するために、要素にハンドラーをアタッチしました。

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

Chrome拡張機能がキーアップイベントをトリガーすると、コンソールに表示されるオブジェクトは、keyCode=0とview=nullの2つを除いて、通常のEventオブジェクトになります。

キーボードのキーを押してキーアップイベントをトリガーすると、keyCode=38およびview=Windowであることがわかります。

誰かがこれを行う方法についてのアイデアを持っていますか?

追加した:

私は何かを発見しました。ディスパッチされる前にイベントをconsole.logにすると、まだ正しい情報が含まれていません。ここ:

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
}
4

1 に答える 1

0

これは WebKit のバグです: https://bugs.webkit.org/show_bug.cgi?id=16735

30文字

于 2012-11-04T02:39:16.963 に答える