safari extensionのイベントハンドラ

safari.application.addEventListener("command", performCommand, false); 
safari.application.addEventListener("validate", validateCommand, false);

sampleコードやマニュアルに上記のよう書いてあるので当初真似して作ったんだけど
ウィンドウをアクティブにしたとたんvalidateイベント通知しまくりで
無限ループ状態となった。なので、validateイベントは無しで実装しました。
safari extensionを作ってみた - うんたらかんたら日記


私の使い方がおかしいのかと思い、
hatena-bookmark-safari-extGmail Checker Safari Extensionデバッグコード仕込んで動かしてみたら
同じように無限ループ。


これって私だけ?
じゃなけりゃ、validateイベント使いもんにならないと思うんだけど。。。
どなたかアドバイスを。。。


そもそも

eventに何が用意されてるのか、サポートページ見てもすぐわかんない。
command, validate, message, change, beforeload があるらしいというのが調べていくうちに分かった。
新規ウィンドウopenしたときに、validateイベントを追加しておくと、通知してくれるので
そのタイミングでcheckさせるようにしようと思ったんだが、この有様。。。

SafariExtensionToolbarItem Class Reference
Safari Extensions Reference

safari extensionを作ってみた


RSS ReaderとしてGoogle Reader使ってまして
チェッカーにReader Notifierを使っていたんだけど、
最近サポート止まって使えなくなってしまっていた。


ソースが公開されているので、これをどうにかしても良かったんだけど
safari extension作ってみたかったということもあり
チャレンジしてみました。


こんな感じです。

概要

まずは、未読数表示(定期的に更新)とボタン押したらgoogle readerへ遷移する
という機能のみ実装しています。


将来的にはGmail Checkerと統合させようと思ってGCheckerという名前にしています。
(メニューバー的なものを出したいんだけど、無理なんだろうか。調査中。)


特にGmail CheckerっていうGmailの未読数を表示するextensionのソースがとても参考になりました。
これをベースに作っています。
中身は、JQueryajax機能を使って、非公式のAPIを叩き、結果をJSONでゴニョっとやるだけです。
(ログインの判断がこれでいいのかという感じですが、、)


あと、mimeは公式ドキュメントに
AddType application/octet-stream .safariextz
と書いてあったのでoctet-streamにしています。

感想

環境設定項目の作るのもGUIでできるので、割と作りやすい印象です。面白かった。
JQuery(javascript自体もだけど)あんま触ったことなかったので勉強になりました。
javascriptにいいエディタってないかなぁ。typoで結構嵌ってしまった。)


あー、あと、アイコン作るのが大変です。(16x16の透過じゃないとダメとか。この辺も勉強になりましたが。)
結局フリーで公開されているものを編集して作りましたが、機能拡張画面用のは面倒なので作ってません。