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で挙動がおかしく困ってましたが、この記事のおかげで動きました。ほんと助かりました。それも記事を書かれたのが昨日とは!!昨日でよかったー。ホントありがとうございました。

とおりすがりの者 said at