swfobject + swfaddressにはまる。
swfobject.js(ver.2.1)とswfaddress.js(ver2.1)を組み合わせて使ってた所、
Flash内での操作であれば、getValueが正常に動いたんだけど、
初回読込み時の、URLから文字列を抽出して(?)、
そのラベル名に飛ばす処理が、どうも動かない。
ASを何度見直しても、問題が見当たらなかったので、
swfobject.jsの変わりに、AC_RunActiveContent.jsでSWFを読込ませたら、
全く問題無く動作。ってことで、原因はJS側の可能性大。
最初は、こんな感じにHTMLとJSを記述。
<div id="swf"></div>
<script type="text/javascript">
<!--
swfobject.embedSWF("index.swf","swf","400","300","8.0.0","index.swf",{},{},{});
//-->
</script>
で、swfobjectの出力は、こうなる。
<object type="application/x-shockwave-flash" data="index.swf" width="400" height="300" id="swf" style="visibility: visible; "></object>
読込み自体は全く問題ないですけど、getValueが動作しない。。
取りあえず、swfaddress.jsのコードを読む前にgoogleに質問。
結果、以下の記事に辿り着きました。
■SWFAddressの使い方
http://www.matzmtok.com/blog/?p=86
記事通りに、id属性とname属性を加えて、以下の記述に変更。
<div id="swf"></div>
<script type="text/javascript">
<!--
swfobject.embedSWF("index.swf","swf","400","300","8.0.0","index.swf",{},{},{id:'swf',name:'swf'});
//-->
</script>
出力は、こんな感じ。
<object type="application/x-shockwave-flash" id="swf" name="swf" data="index.swf" width="400" height="300" style="visibility: visible; "></object>
で、問題なく動いた!
動けばそれでOKってことであれば、ここで終了ですけど、
はまった理由は、ここから。
要するにid,name属性が必要ってことだから、
最初の記述にname属性のみを加えればOKなはずなので、
こんな感じに修正。
<div id="swf"></div>
<script type="text/javascript">
<!--
swfobject.embedSWF("index.swf","swf","400","300","8.0.0","index.swf",{},{},{name:'swf'});
//-->
</script>
で、再度出力を確認。
<object type="application/x-shockwave-flash" name="swf" data="index.swf" width="400" height="300" id="swf" style="visibility: visible; "></object>
一見、問題無さそうに見えるが、動かない。。
順番は違えど、id,name属性共にあるのに!
しかも、javascript:(function(){alert(document.getElementById('swf'));})()でも、
参照出来るし!!
実行されるタイミングの問題とかで、
swfaddressが正しくidを取得出来ていないのか、
もしくは、swfobjectの出力が、なんちゃってid属性なのか、
恐らく前者の可能性が高い(予想)と思われるけど、
いずれにせよ、原因を特定するには、ライブラリの中身を読まなくては。。
ここら辺の処理は、流行のProgressionでやってしまうのが、ベストなようですが、
良く見たら、同梱ライブラリのSWFObjectは、1.5じゃないですか。。
ってことは、SWFOjectに原因あり??なのか。
ま、追々時間のある時にでも。
こんなに検証してくれている、すばらしい方も↓
■SWFAddressとSWFObjectを組み合わせた時の挙動
http://www.scratchbrain.net/blog/ver2/entries/000484.html
SWFObject1.5とSWFObject2.1で挙動がおかしく困ってましたが、この記事のおかげで動きました。ほんと助かりました。それも記事を書かれたのが昨日とは!!昨日でよかったー。ホントありがとうございました。