Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2010 February 18th Thursday

Chrome Keyconfigのpinを叩く

14:44 | Chrome Keyconfigのpinを叩く - FFFF を含むブックマーク はてなブックマーク - Chrome Keyconfigのpinを叩く - FFFF

こんな感じにできるようにしてみた

document.addEventListener('LDRize.strokedPins',function(e){
	console.log(e);
	console.log(e.target); // pinされてるノード
	console.log(e.newValue);// pinされたノードのリンク
},false);
var ev = document.createEvent('Event');
ev.initEvent('LDRize.strokePins', true, false);
document.dispatchEvent(ev);

LDRize.strokePinsというイベントを投げると、LDRize.strokedPinsというイベントを投げ返してくる。3つpinしてれば3回LDRize.strokedPinsイベントを受け取ることになる。LDRize.strokedPinsはMutationEventです。

ただ、このままだと誰が叩いたのか判断できずに、まさしく誤爆してしまう。なので、MessageEventでEventTypeを指定できるようにしてある。

document.addEventListener('LDRize.strokedPins.Taberareloo',function(e){
	console.log(e);
},false);
//<del>var message = JSON.stringify({args:["LDRize.strokedPins.Taberareloo"]});</del>
var message = JSON.stringify({type:"LDRize.strokedPins.Taberareloo"});
var ev = document.createEvent('MessageEvent');
ev.initMessageEvent('LDRize.strokePins', true, false, message, location.protocol + "//" + location.host, "", window);
document.dispatchEvent(ev);

messageはJSON文字列で。

これでTaberarelooとの連携ができそうだと思うのですが、いかがでしょうか、d:id:Constellation

追記:

コメントを受けて、

os0x / ChromeKeyconfig / commit / ea19a644b6fa — Bitbucket

os0x / ChromeKeyconfig / commit / ca6ccd559be4 — Bitbucket

LDRize.strokedPins.end、LDRize.clearPins、LDRize.getStatus追加

LDRize.strokedPins.endは、MessageEventでtypeを受け取っていた場合はその名前の後ろに.endをつけるようにしました。MutationEventは同期的なので、最後に実行されるはずです(でも、ほんとはMutationEvent使うべきではないんだろうな…)。

document.addEventListener('LDRize.status.Taberareloo',function(e){
	console.log(e);
	console.log(JSON.parse(e.data));//pinの数やsiteinfoなどが入っている
},false);
//var message = JSON.stringify({args:["LDRize.status.Taberareloo"]});
var message = JSON.stringify({type:"LDRize.status.Taberareloo"});
var ev = document.createEvent('MessageEvent');
ev.initMessageEvent('LDRize.getStatus', true, false, message, location.protocol + "//" + location.host, "", window);
document.dispatchEvent(ev);

追記2:

MessageEventで渡すJSONのフォーマットを変更。argsという良く分からない配列になってたので、シンプルにtypeをキーに。

ConstellationConstellation2010/02/18 15:02おおーっ, すばらしいです! いろいろお願いばかりですいません. ありがとうございます!!
Changeset http://bitbucket.org/os0x/chromekeyconfig/changeset/d95135de9b60/ , 先ほど読みましたー.
なるほど, うちは頭固いので一回のEventでやるようにばかり考えてしまっていて, XPath投げつけるとか屈折したことばかり考えていました.

あとお願いばかりで大変心苦しいのですが, clear pinのようなもの, またpin総数を返すもしくはstrokedPinsの終了を報告するようなEventがあると非常に助かります. strokedPins発行後, pin総数の情報を元にstrokedPins側のイベント回数をカウントする, もしくは終了のEvent通知を待って, すべて終了してからpinをclearするなどが出来ればと.

os0xos0x2010/02/18 15:51早速、追加してみました。こんな感じでよろしいでしょうか?

ConstellationConstellation2010/02/18 16:53ありがとうございます! ばっちりです! これでDashboardでやりたい放題できそうです!!
大変助かります. お願いばかりですいませんです...

os0xos0x2010/02/18 18:10いえいえ、こちらこそ本当に助かってます。