Adobe Air+Javascriptでイベントが発生せず
あろうことかYahooウィジェットが提供終了。
元祖?Yahoo(USA)が先にサポート終了したので、もしやと思っていたけど、追従してYahoo!Japanも終了。
自作でいろいろとウィジェットを作って、仕事でもプライベートでも欠かせない存在となっていたので、早々に代役を探さなくてはならなくなった。
Googleといい、Microsoftといい、そしてYahooといい、デスクトップウィジェットはなぜ流行らなかったのか、σ(^^)には理解できない。
デスクトップウィジェットなるものはいろいろ存在したが、長寿命を期待できる(実際はどうか分からないが?)AdobeのAirに移行することにした。
Yahooウィジェット同様、Javascriptでも作成できるのが嬉しい…が、Yahooウィジェットのコードをそのまま移行できる訳ではなく、Airサイドの制約があり、かなり手こずった。
特にてこずったのがイベント処理。
動的に追加した要素にイベントを付加しても、そのイベントが発生しないのだ。
setAttributeからaddEventlistner、attachEventといろいろ試したが、後発的に追加した要素では一向にイベントが発生しない。
いろいろ探したあげくたどり着いたのがこちらのサイト。
Airでは、動的に追加した要素にイベントは発生しないのね(^^;)
そして利用するのがjqueryのdelegateとか。
見よう見まねで自作Airに追加したコードが以下の通り。参考まで。
Clickイベントが発生した時、その要素のIDが"checkpage"と言う文字を含む場合に、あらかじめ設定してあるURLを開く、と言うもの。
URLはopenurl配列に別途設定。
<script type="text/javascript"> $(function () { $('#myFrame').delegate('div', 'click', function(e){ if($(this)[0].id.indexOf("checkpage")>-1) { var thisid = $(this)[0].id.replace("checkpage",""); var url = openurl[thisid]; var urlReq = new air.URLRequest(url); air.navigateToURL(urlReq); } }); }); </script>
作成したAirウィジェットは近日ここにアップ予定(^^)/