• ベストアンサー

ExternalInterfaceとframesetの相性。

framesetとExternalInterfaceについて質問です。 制作環境はflash8 とdreamweaver 8です。 framesetで読み込んでいるhtmlの中にswfobjectでswfを配置しました。 ExternalInterface使ってswfのfunctionを実行する際、通常は、swfobjectを使って var attachSwf = new SWFObject("/swf/navi.swf", "swfnavi", "100", "154", "8", "#FFFFFF"); このように配置すると、 「swfnavi」を指定してあげればその中のfunctionが実行されますが、 framesetで、swfを配置しているhtmlを <frame src="navi.html" frameborder="no" scrolling="no" noresize="noresize" id="naviarea" /> このように指定した際、配置元のhtmlのid名+swf名ということで、 naviarea. swfnavi.returnEvent(myFunction); と、やってみました。 safari(2.0.4)ではきちんと動くのですが、 firefox (2.0.0.12)で見てみたところ、全くfunctionが実行されません。 色々調べてみましたが、ブラウザのid判定は頭に、「window」「document」等、付けることくらいしか分からず、試しましたが変化無しです。(safariはどちらも動きます) javascriptをswfを配置しているhtmlで読み込めば動くとは思うのですが、それは今回は使えないのです。 safariとfirefoxで、framesetの指定方法が違うのかも?というのが原因のような気がするのですが、どなたか何か分かる方がいらっしゃいましたらご教示頂けると幸いです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

<frame name="naviarea" id="naviarea" (略)> としてみてはいかがでしょうか。 未検証です。 id属性しか使えないのであれば、 ブラウザの独自仕様により、id属性のついたエレメントを、idを変数名にして、直接取得できる物もありますが、 document.getElementById()を使う方が良いと思います。

ramstein
質問者

お礼

こちらも早速のご指導ありがとうございます。 参考にさせていただき、 <frame name="naviarea" id="naviarea" (略)> とやりましたところ、動いちゃいました! ありがとうございます。 とても助かりました。 初めてframesetというものを使ったので、今後も役に立てていけたらと思います。

その他の回答 (1)

  • arexis
  • ベストアンサー率66% (66/99)
回答No.2

Flashの事は私はわかりませんのが、 JavaScriptでiframeのwindowを iframeのIDから指定する時は Firefox以外では ID単独でiframe内ウィンドウを指定できますが、 Firefoxは document.getElementById(ID).contentWindow です。 そのフレームの場合 document.getElementById('naviarea').contentWindow が Firefoxも含めたIE、Safariなどでもiframe内のwindow を意味します。 更にその下のドキュメントなら document.getElementById('naviarea').contentWindow.documentです。 name属性を使っても良い状況なら iframeにname指定がある場合は、どのブラウザでも name だけで iframe内windowを意味します。 参考になれば良いですが・・・。

ramstein
質問者

お礼

name属性で出来ました! すいません、ホントに素人なので、せっかく書いていただいた、 - - - - - - - - - - name属性を使っても良い状況なら iframeにname指定がある場合は、どのブラウザでも name だけで iframe内windowを意味します。 - - - - - - - - - - これを理解できませんでした。 arexisさんの後にお返事いただいたtalooさんの文章を読んで試したところ、動きました! arexisさんの後半の説明を読み直してみると、 frame name="naviarea" id="naviarea" ということだったのですね…。 このたびは、本当にありがとうございました。

ramstein
質問者

補足

早速のご指導ありがとうございます。 参考にさせていただき、 document.getElementById('naviarea').contentWindow. swfnavi.returnEvent(myFunction); としてみましたが、やはりsafariでは動いてfirefoxでは動きませんでした。 ホームページを作るのは難しいことだらけです(涙)

関連するQ&A