[js][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を参考にしました。
正直自分では思いつかないコードで勉強になりました。
サイトスクリプトとして動作させたいコードを別ファイルにして、挿入する方法がないか考えたのですが思いついてません。