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ウィジェットは近日ここにアップ予定(^^)/
