FLYING

/* TODO: 気の利いた説明を書く */

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トグルが動かない不具合があったので,スクリプトを修正した。