AIRE-PROJECT BLOG

RecentComments

月別アーカイブ

Link

« IE6とIE7を共存させる | Home | インストール後にエンコードを変更する »

2007年03月14日

Adobe Spry で表示のアップデート完了イベントをキャッチする

Ajax

ひさびさにAjaxネタです。
また仕事での苦労話なんですが、現在進行中(もうすぐ公開)のプロジェクトでAjaxを導入していて、AdobeのSpryを使っています。
で、Master Region と Detail Region の関係を使って、ボタンを押すと詳細データが切り替わるという仕様になっていたのですが、切り替えると一部の画像が表示されなくなるという問題が発生しました。
その画像が表示切替ボタンだったもんだから大問題!
やれやれ、です。

問題が起こる条件があって、ブラウザはIE6で、別ウィンドウを開いた後で切替動作を行うと、画像が消える。
という、なぜに別ウィンドウが関係するんだ?というような条件でした。

この現象が起こっているときに「ieHTTPHeaders」でヘッダー情報を確認してみると、更新すべきXMLファイルのほかに、更新されるエリアの画像までサーバーに取りに行っていることがわかりました。
これはIE7でも同じです。
IEとSpryの組み合わせ特有の問題のようです。
Firefoxではそんなこと起こらないし。

サーバーからの画像要求の返答と、Ajaxの表示切替のタイミングによって画像が表示されたりされなかったりしているらしい、ということまではこれでわかりました。

根本的に画像をサーバーに取りに行かせないようにできれば一番良いのですが、これはSpryの不具合っぽいので無理!
仕方ないので、対症療法的に表示タイミングをずらせることで対処することにしました。
ちなみにこのボタン、ステイ表示をさせるためにSpryとは別のところでスクリプトを組んで画像を切り替えています。

その画像表示のタイミング、Spryのほうで表示のアップデートが終わってから、ボタンのステイ表示を切り替える順番にするには、アップデート完了のイベントが必要です。
調べてみたらありがたいことにありました。

Adobeのドキュメントの目次で言うと、「Region Observer Notifications 」です。

サンプルコードはこんな感じ。


<script>
myObserver = new Object;
myObserver.onPostUpdate = function(notifier, data)
{
alert("onPostUpdate called for " + data.regionID);
};
Spry.Data.Region.addObserver("employeeListRegion", myObserver);
</script>

アップデート完了のほかには、

onLoadingData : ローディング中
onPreUpdate : アップデート開始
onError : ロード失敗

がキャッチできるみたいです。

これで、問題はほぼ解決。
ほぼ、というのはそれでも稀に現象が起こってしまうから。
う~、完全解決は難しそうです。

トラックバック

コメントを投稿

「大萩康司」 おすすめCD&DVD

ハバナ・ライヴ 2005(Concierto en La HABANA 2005)

ハバナ・ライヴ 2005(Concierto en La HABANA 2005)

<大萩康司>

鐘のなるキューバの風景

鐘のなるキューバの風景

<大萩康司>

島へ

島へ

<大萩康司>

ブルー

ブルー

<大萩康司>

シエロ

シエロ

<大萩康司>

Mirai~若きマエストロたち~

Mirai~若きマエストロたち~

<オムニバス>

関連エントリー 【Ajax

はてなブックマーク del.icio.us ニフティクリップ livedoor クリップ POOKMARK Airlines Buzzurl(バザール)

Web制作者におススメの一冊

デザイン・ルールズ デザインをはじめる前に知っておきたいこと

SEIBUNDO MOOK Webデザインノート No.1 (SEIBUNDO mook)

SAMURAI佐藤可士和のつくり方

Web標準の教科書―XHTMLとCSSでつくる“正しい”Webサイト

CSS Zen Garden Book―Webデザインのベストプラクティスに学ぶ、CSSクリエイティブ・テクニック (Web Designing BOOKS)

スタイルシート スタイルブック

俺流amazonの作り方―Amazon Webサービス最新活用テクニック

Copyright © 2007 Aire-Project All Rights Reserved.