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

LINEで送る
Pocket

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*
To prove you're a person (not a spam script), type the security word shown in the picture.
Anti-spam image

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください