Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2009 December 20th Sunday

Chrome Keyconfig、Chrome Gestureにアクションを追加する方法:ドラフト

| 19:04 | Chrome Keyconfig、Chrome Gestureにアクションを追加する方法:ドラフト - FFFF を含むブックマーク はてなブックマーク - Chrome Keyconfig、Chrome Gestureにアクションを追加する方法:ドラフト - FFFF

Chrome Keyconfig、Chrome Gesturesにアクションを追加する方法について、AutoPatchWork 1.0.2では、下記のようにした。

Google Code Archive - Long-term storage for Google Code Project Hosting.

var CHROME_GESTURES = 'jpkfjicglakibpenojifdiepckckakgk';
var CHROME_KEYCONFIG = 'okneonigbfnolfkmfgjmaeniipdjkgkl';
var action = {
	group:'AutoPatchWork',
	actions:[
		{name:'AutoPatchWork.toggle'},
		{name:'AutoPatchWork.request'}
	]
};
chrome.extension.sendRequest(CHROME_GESTURES, action);
chrome.extension.sendRequest(CHROME_KEYCONFIG, action);

こんな感じでオブジェクトを渡すと、Keyconfig、Gesturesの設定画面のセレクトボックスにAutoPatchWork.toggleとAutoPatchWork.requestが追加される。ユーザーがそれを選択し、どこかのページでそのアクションを呼び出すとその名前のEventが発行されるようにしている。

Gesturesの場合、こんな感じ。

var ev = document.createEvent('Event');
ev.initEvent(act.name, true, false);
ev.direction = GM._directionChain;
ev.action = act;
document.dispatchEvent(ev);

Keyconfigの場合、timesはviモードを有効にしている場合に5 jと押すと5が入る。

var ev = document.createEvent('Event');
ev.initEvent(act.name, true, false);
ev.key = key;
ev.action = act;
ev.times = KC._times||KC.times||1;
ev.target = target;
document.dispatchEvent(ev);

これらのEventオブジェクトに付けたプロパティは、拡張同士だと参照可能だけど、ページ側からは見えないようになっています(今のところ)。

で、とりあえずはこれで使えそうな気がするけど、ちょっと問題がある。

というのも、AutoPatchWorkからsendRequestするタイミングがシビアで、起動時に登録を失敗することがあるみたい。しかも、AutoPatchWorkの有効・無効を切り替えると、アクションが増えてしまう…。

このへん、スマートな解決方法がなさそうでどうしたものかなと悩み中です。

ConstellationConstellation2009/12/21 18:18登録が成功したか, KeyConfigがinstallされているかなどがわかるとありがたいので, callbackを呼んでいただけるとありがたいです. (成功しなかった場合は自前で準備など...)