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を読んでいる人のブログなどご存じの方がいらっしゃいましたら,ご教示いただけないでしょうか.