LoginSignup
2
3

More than 5 years have passed since last update.

Twitterのショートカットを日本語IMEがOnの時も動作させたい(未完)

Posted at

https://twitter.com/ のキーボードショートカットは,日本語入力がOnの際は動作しません.
これは,keyDownイベントのkeyCodeの値が,日本語入力時と英語入力時で異なるためであると考えられます.
一方で,keyUpイベントのkeyCodeの値は,日本語入力・英語入力時で同じです.
従って,keyUpイベントの値を利用して,keyDownイベントをシミュレートすればと良いと考え,以下のようなコードを書きました.

// Chromeのkeyboardイベントクラス実装では,keyCodeはreadOnlyとなっているため,以下のような方法を用いています.
// 参照: https://groups.google.com/forum/#!msg/chrome-api-developers-jp/nZgW_c61dvs/YO5dvpk8iREJ
function dispatchKeyDown(receivedEvent) {
    var createdEvent = document.createEvent('Event');
    var options = {
        type:'keydown',
        canBubble: true,
        cancelable: true,
    };
    createdEvent.initEvent(options.type, options.canBubble, options.cancelable);

    Object.keys(receivedEvent).forEach(function(key) {
        if (!options.key)
            createdEvent[key] = receivedEvent[key];
    });

    createdEvent.__proto__ = document.createEvent('KeyboardEvent').__proto__;
    document.dispatchEvent(createdEvent);
}

document.addEventListener('keyup', dispatchKeyDown);
document.addEventListener('keydown', function(e) {console.log(e.keyCode);});

ログを見るとkeyCodeの値は正しく設定されているようですが,Twitterのショートカットは起動できません.
keypressイベントでショートカットが起動するのかと思い,適当なkeyCodeを与えてkeypressでもやってみましたが(keyupのkeyCodeとkeypressのkeyCodeは異なるため),うまくいきませんでした.
考えられる理由,TwitterのJavaScriptを読んでいる人のブログなどご存じの方がいらっしゃいましたら,ご教示いただけないでしょうか.

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3