Tumblrのショートカットキーを置換する
dashboardでいちいちoption+R/Eキーでrblgするのが指的に辛いので,ChromeのUserScriptでR/Eキー単体でrblgできるようにした。ソースは下記から。
KeyboardEvent#stopPropagationでイベントの伝播を止めつつ,似非KeyboardEventを生成して,Tumblr側のjsで定義されているkeydownのイベントハンドラに渡してやるという実装になっている。
バッドノウハウっぽいポイントとしては,ウェブページのコンテキストで関数を実行する下記の関数と……
var executeBrowserContext = function(f) { var code = f.toString(); var script = document.createElement("script"); script.textContent = '(' + code + ')();'; document.body.appendChild(script); };
Chrome向けにむりやりKeyboardEventインスタンスを生成する下記の関数。
var createEvent = function(charCode, optionKey) { var e = document.createEvent('KeyboardEvent'); Object.defineProperty(e, 'charCode', { get: function() { return charCode; } }); Object.defineProperty(e, 'shiftKey', { get: function() { return optionKey; } }); Object.defineProperty(e, 'altKey', { get: function() { return optionKey; } }); return e; };
そんな感じの怪しい実装なのだが,とりあえず手元のChrome(Version: 25.0.1364.99)では動いている。
追記(2013-03-16T15:09:00+09:00)
LキーでのLikeトグルが動かない不具合があったので,スクリプトを修正した。