• ベストアンサー

フラッシュでの別ウインドウの開き方

すみません質問です。 フラッシュで別ウインドウを開くswfをつくり、それは 正常に動いているのですが、そのhtmlを別のフレーム セットhtml(2分割フレーム)の フレームの一つに埋めて扱ったところフラッシュ中からhtmlが 開かなくなりました。 どうしたら良いでしょう。 別ウインドウを開くhtml⇒swf.html フレームセットのhtml⇒flameset.html としたとき、 swf.htmlはflameset.htmlの中にフレームの一つとして 入っている状態です。 swf.htmlを単独で開いた場合はその中のswfから 別フレームを開くことが出来ます。 フレームの一つとした状態からだと駄目なのです。。 よろしくお願いします。

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

  • ベストアンサー
  • mat-21
  • ベストアンサー率56% (91/162)
回答No.3

#02です。 js-------------------- <script language=javascript> function alt(){ alert(this.window.location); } </script> as-------------------- on(release){ getURL("javascript:alt();"); } 上記、拝見しました。特に間違いはないかと思うのですが、私も参考書を参照しましたが、間違いはないと思います。強いて言うなら、 as-------------------- on(release){ this.getURL("javascript:alt()"); } でどうでしょう?

elmar
質問者

お礼

どうもこんばんは。 いろいろとご相談させていただきましたが、解決しました。 結論をいうと、ActionScript JavaScriptともにまったく問題はありませんでした。 ではなぜ動かなかったかというと、Framesetを作っている(親フレームの)htmlと 子フレームの(swfの入っている)htmlがそれぞれ帰属するドメインが違って いたからのようです(実は)。 全然違うサイトの管理者が他の管理下にあるhtmlを勝手にフレームに取り込んだり ましてやjavascriptを動作させるなどセキュリティ上とんでもない という都合のようでした。 確かにフレームを使っての勝手なページの取り込みなんかを無制限で 許可してしまうと、scriptによっては関数名やobject名の重複や混在が 発生しやすくなり、ユーザに被害に合わせてしまう恐れが高くなります。 マウスオーバーでのスワップイメージ程度ならともかく、window.openなどになると 物騒ということで、無効化されていたのかもしれないです。 まーはっきりとはわかりませんが、、。 とにかく、ありがとうございました。 大変助かりました!

elmar
質問者

補足

たびたびの回答ありがとうございます。 また、いただいたアドバイスを使って修正してみましたが、やはりうまくいきません。 alertの表示が出来なかったことから、javascriptとアクションスクリプトの 連携が取れなくなっている、バグか何かと判断せざるを得ないようです。 ためしに、javascript側からフラッシュ内のMCを動かすスクリプトを書いても、 やはり「子フレームとして扱った場合のみ」うまくいきませんでした。(以下のもの) (自身のフレームがF-sitaの場合のみ、checkerMCを2フレーム目に移動) <script language="javascript"> if(top.frames[1].name=="F-sita"){ window["pt"].TGotoFrame("_flash0/checker",2); } </script> 仕方がないので、隠しフレームを設け(name=hidden,height=0)、フラッシュからは target=hiddenの形で別のhtmlを開き、その開かれるhtmlに onLoadで本来の目的のwindow.openを仕掛けました。 これなら、swfからはJSを直接干渉していないので目的は達成できるのですが、 フレームの遷移の関係で、opener.parent.frames のページ全体の ユーザビリティが悪くなってしまいました。(ブラウザの戻るボタンを) 押しても、swfのフレームの見える部分が戻らない(hiddenフレームがユーザの 見えない部分で1ページ戻ってるから。) どうしようもないって感じです。 flashにjavascriptのwindow.openを直接埋め込むようなことって 出来ないでしょうか。

その他の回答 (2)

  • mat-21
  • ベストアンサー率56% (91/162)
回答No.2

上下2分割のフレーム(frameset.html)には、上のフレームには「top.html」があり、下のフレームには、「xxx.swf」を配置した「swf.html」があるわけですよね。 それで、xxx.swf内に例えばボタンがあって、そのボタンを押すと、新たに小さいウィンドウが出ればいいのかな? 「swf.html」側にJavaScriptを記述すると思うのですが...。 例えば、 <head>~</head>の間に <script language="JavaScript" type="text/JavaScript"> <!-- function popUpWindow(fileName, windowName){ var windowStyle='channelmode=no,directories=no,fullscreen=no,location=no,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,toolbar=no,top=100,left=100,width=300,height=300'; window.open(fileName, windowName, windowStyle); } と記述して、 「xxx.swf」のリンクのアクションスクリプトを使って、例えばボタンのシンボルだったら、ボタンのシンボルを選択して、 on(release){ this.getURL("JavaScript:popUpWindow('hirakitai.html','newWindow')"); } で新しい横立て300pxのウィンドウが出ると思うのですが...。

elmar
質問者

お礼

ごぶさたしてます。 いただいたアドバイスの通り、フラッシュの内部のボタンのactionScriptに 開かれるウインドウのurlその他の引数をつけてみたのですが、 やはりうまくいきません。 どうしたら良いでしょう? なんだか、フラッシュとJavascriptの連携がうまくいっていない感じです。 ためしに、ウインドウを開くjavascriptの代わりに、自分自身のURLを 参照してalert表示するスクリプトをフラッシュからたたかせても うまくいきませんでした。 js-------------------- <script language=javascript> function alt(){ alert(this.window.location); } </script> as-------------------- on(release){ getURL("javascript:alt();"); } こんな感じです。 どうしたら良いんだろ? html全体に問題があり、それがエラーを起こしているのかなぁ・・。

elmar
質問者

補足

丁寧な回答ありがとうございます。 今までの自分のやり方では、フラッシュのボタンに書くアクションスクリプトには 実行するJavaScriptの関数名( openIt() )だけを書き 関数名後ろの引数は書かなかったのですが、 (htmlのjavascriptに開くURLその他を全て書いていたので) いただいたアドバイスの通り、開き先のURL位はフラッシュ内の ボタンに書いたほうがいいのかも知れません。 ためしにこの方法でやってみて、またご報告させていただきます。 ただ、投稿させていただいた動作不良は、WIN版IEでのみの現象で、 ほかのブラウザなどではちゃんと動いていたのが気になります。。 (その後、複数の環境で確認してみました) WIN用IEのバグかもしれません。。 最悪ですが・・・。泣。

  • aieeen
  • ベストアンサー率12% (7/54)
回答No.1

フレームから飛ぶ場合は url=get url ウインド=_parent ですか? 意味がちょっと分かりませんでした。

elmar
質問者

補足

すみません、意味通じにくかったみたいで。。 フラッシュから子ウインドウを開くテクニックがありますよね。 それは出来るんです。 (そのフラッシュのswfファイルが乗っているhtmlに window.open("hoge.html","name","features")の javascript関数を記述して、フラッシュのActionScriptからは そのjavascriptを実行させる) 仮に、このhtmlをswf.htmlとします。 それとは別に、フレームを切っているhtmlをflameset.htmlとします。 で、このflameset.htmlに子フレームとしてswf.htmlが入っているわけです。 flameset.htmlのソース的には <flameset rows=50> <flame src=top.html> <flame src=swf.html> </flameset> って感じです。(top.htmlはなんでも良いです) んで、この状態になると、下フレームにあるswf.htmlの中のフラッシュから、 子フレームが開けなくなってしまうのです。 どうやったら、問題解決するかなぁと。 よろしくお願いします。

関連するQ&A