Posts Tagged “flash”

マッシュアップのための第二歩目:FlashでAPIからXMLを呼んだときはxmlnsに注意する(2)

このエントリの続きです。今回はHotPepperAPIを使って適当なお店の名前と住所とキャッチコピーをゲッツします。

いきなりハマる

普通にXMLをE4Xで解釈して trace(dataXML.shop[i].catch) と書くとエラーが出ます。これはどういうことか。クーピーさんのこのエントリによれば、catch というのは try~catch の名前とバッティングしてしまうから、らしいです。で、解決方法も書いてあるんですがよくわかりません。

trace(xml.ns::["catch"][0]); // 出力 :: Flasher 募集中!

こういう書き方でいいらしいんですけど、このns::をどこにつけたらいいのかが、このエントリからはサッパリ分かりません。たとえば、xml本体が dataXML.shop[i].catch だった場合はどこにns::をつけるの? ということです。

JSONっぽいオブジェクトの格納方法を考えてた

JSONというとこんな↓のが思いつきます。

var myJSONObject =
{
"キーワード": "説明"
};

でもこれだと、キーワードに対する説明がひとつしか持てません。そこで、説明の部分を配列にしてみました。

var words:Object = {
"箱根":["地名","外国人に人気の観光地"],
"アイス":["食べ物","夏といえばこれ"]
}
var w :String= "アイス"
if(words[w]){
var type=words[w][0]
var comment=words[w][1]
trace(w+"は"+type+"で、"+comment+"です")
}

こうすると、「アイスは食べ物で、夏といえばこれです」とか「箱根は地名で、外国人に人気の観光地です」とか、キーワードに対して説明を2つ以上持たせられます。

っていう超アホな話なんですけど、自分で思いついたものってブログに書きたくなるよねぇー、というだけです。

これがあると何が嬉しいかというと、適当なキーワードを選ぶと、そのキーワードの属性や説明や付属情報など、いろいろをまとめやすいということです。さらにはwords[w][2]とかにフレームラベルを入れておいて、画面のmcをそのフレームにgotoさせるとかね。
objectの形にするか連想配列にするか、本当はずっと迷っていて、1対1のJSON形式のデータをいくつも重ねてテーブル扱いしようかと思ってたけどJSONって関数も書けるし汎用!ってことに気付いてから、上の形式にしました。

ExternalInterfaceのaddCallbackが実行されないエラー

via:
ExternalInterfaceでActionScriptの関数呼び出し失敗への対策 – blog.katsumata.tv
ExternalInterfaceのはまりどころを再検証 -tech.kayac.com

jsとswfを繋げるためにExのcallとaddCallbackを使いまくるんですが、ときどきaddCallbackが動作しないことがあります。
これのために土日月を費やしてしまいました。

//swf.objidはFlashを書き出しているSWFObjectの第二引数
function call0(){
var player = document.all? window[swf.objid] : document[swf.objid];
player.OverlayCallBack0()
}

普通はこれでFlash側の OverlayCallBack0() 関数が動くはずなんですが、うんともすんとも言いません。そこで、もう諦めて「ブッダ」読んで寝ようと思ったときに

try{
call0();
}catch(e){
alert(e)
}

ってやってみたら、alertされて「TypeError:player.OverlayCallBack0 is not a Function.」と表示されました。これはエラーがキャッチされた証拠です。で、このエラーは何かというと、flash側の用意ができていないよ、ということらしい。Firebugコンソールで普通に「call0()」とタイプするとちゃんとFlashは動きます。どういうこっちゃ。

上記のエントリでは、JSの関数を実行したいときはASから呼べ、と書いてありますが逆にASをJSから確実に呼びたいときはどうすればいいんでしょうねぇ? Flash自体はローディングを用意してあるので、ロードが完了したらcallbackして、その先の処理を進めているから、Flashがロードできていない状態というのはありえないわけです。じゃあなぜ??

ASを呼ぶにはASから? JSを呼ぶのはASから、というのは楽ですが、ASを呼ぶためのJSが is not a Function. なのは意味不明です。。。。