Subscribed unsubscribe Subscribe Subscribe

[js][chrome] hiveminder localtimetrack for chromeリリース

Hiveminder localtimetrack for chrome

typesterさんのhiveminder localtimetrackをgoogle chromeの拡張として改良し、リリースしました。
https://chrome.google.com/extensions/detail/hkleomkjlbhamikmcfnagbaafmdoecba

変更点

growl→webkitnotification

元のfluid版ではgrowl表示ができるのですが、chromeではgrowlに表示を出すことができません。よって、代りにwebkitnotificationを使ってます。growlに比べて見た目がいまいちですが…。

localStorageに経過時間を保存

http://d.hatena.ne.jp/samurai20000/20100508/1273333715でも書きましたがfluid版ではアプリを再起動した際にlocalStorageが消えてなくなってしまいます。chromeではもちろんですが再起動時もlocalStorageの内容が消えることがないので、永続的に経過時間を保存できます。
fluidでもcookieを使用することでアプリ再起動時も経過時間を保存するhackをtypesterさんがやってます。
http://github.com/typester/hiveminder-local-timetrack/tree/topic/cookie

what are you doing?機能

タイマーが動いてないときに何やってるのか尋ねてくる鬼機能です。10分毎に尋ねてきます。fluid版で試しに実装してみたところ良かったので入れてみました。
http://github.com/samurai20000/hiveminder-local-timetrack/tree/whatareyoudoing


fluid依存を無くし、windowsでも使えるようになりましたのでhiveminder使いは試してみてください。
ソースも公開しています。
http://github.com/samurai20000/hiveminder-local-timetrack-for-chrome

技術的なこと

今回のアプリではサイト(hiveminder.com)に埋め込まれているjgrowlをwebkitnotificationに通知するように上書きする必要があったので、サイトスクリプトとして動かしています。
初めて、chrome extension を作ったので知らなかったのですがコンテントスクリプトはページ内のスクリプトとは独立した空間(isolated world)で実行されるので、サイトスクリプトにはアクセスできません。
よって、サイトスクリプトとして動作するようにscript要素を作成して、textとして埋め込んでます。

(function(window,loaded){
     if (!loaded && this.chrome) {
	 var fn = '(' + arguments.callee.toString() + ')(this,true);';

         var script = document.createElement('script');
	 script.appendChild(document.createTextNode(fn));
	 document.getElementsByTagName("head")[0].appendChild(script);
	 return;
     }

     // サイトスクリプトとして動作させたいjs

})(window);

上記のコードはhttp://d.hatena.ne.jp/os0x/20090824/1251133041を参考にしました。
正直自分では思いつかないコードで勉強になりました。

サイトスクリプトとして動作させたいコードを別ファイルにして、挿入する方法がないか考えたのですが思いついてません。