- ベストアンサー
フラッシュでの別ウインドウの開き方
すみません質問です。 フラッシュで別ウインドウを開くswfをつくり、それは 正常に動いているのですが、そのhtmlを別のフレーム セットhtml(2分割フレーム)の フレームの一つに埋めて扱ったところフラッシュ中からhtmlが 開かなくなりました。 どうしたら良いでしょう。 別ウインドウを開くhtml⇒swf.html フレームセットのhtml⇒flameset.html としたとき、 swf.htmlはflameset.htmlの中にフレームの一つとして 入っている状態です。 swf.htmlを単独で開いた場合はその中のswfから 別フレームを開くことが出来ます。 フレームの一つとした状態からだと駄目なのです。。 よろしくお願いします。
- みんなの回答 (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()"); } でどうでしょう?
その他の回答 (2)
- mat-21
- ベストアンサー率56% (91/162)
上下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のウィンドウが出ると思うのですが...。
お礼
ごぶさたしてます。 いただいたアドバイスの通り、フラッシュの内部のボタンのactionScriptに 開かれるウインドウのurlその他の引数をつけてみたのですが、 やはりうまくいきません。 どうしたら良いでしょう? なんだか、フラッシュとJavascriptの連携がうまくいっていない感じです。 ためしに、ウインドウを開くjavascriptの代わりに、自分自身のURLを 参照してalert表示するスクリプトをフラッシュからたたかせても うまくいきませんでした。 js-------------------- <script language=javascript> function alt(){ alert(this.window.location); } </script> as-------------------- on(release){ getURL("javascript:alt();"); } こんな感じです。 どうしたら良いんだろ? html全体に問題があり、それがエラーを起こしているのかなぁ・・。
補足
丁寧な回答ありがとうございます。 今までの自分のやり方では、フラッシュのボタンに書くアクションスクリプトには 実行するJavaScriptの関数名( openIt() )だけを書き 関数名後ろの引数は書かなかったのですが、 (htmlのjavascriptに開くURLその他を全て書いていたので) いただいたアドバイスの通り、開き先のURL位はフラッシュ内の ボタンに書いたほうがいいのかも知れません。 ためしにこの方法でやってみて、またご報告させていただきます。 ただ、投稿させていただいた動作不良は、WIN版IEでのみの現象で、 ほかのブラウザなどではちゃんと動いていたのが気になります。。 (その後、複数の環境で確認してみました) WIN用IEのバグかもしれません。。 最悪ですが・・・。泣。
- aieeen
- ベストアンサー率12% (7/54)
フレームから飛ぶ場合は url=get url ウインド=_parent ですか? 意味がちょっと分かりませんでした。
補足
すみません、意味通じにくかったみたいで。。 フラッシュから子ウインドウを開くテクニックがありますよね。 それは出来るんです。 (そのフラッシュの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の中のフラッシュから、 子フレームが開けなくなってしまうのです。 どうやったら、問題解決するかなぁと。 よろしくお願いします。
お礼
どうもこんばんは。 いろいろとご相談させていただきましたが、解決しました。 結論をいうと、ActionScript JavaScriptともにまったく問題はありませんでした。 ではなぜ動かなかったかというと、Framesetを作っている(親フレームの)htmlと 子フレームの(swfの入っている)htmlがそれぞれ帰属するドメインが違って いたからのようです(実は)。 全然違うサイトの管理者が他の管理下にあるhtmlを勝手にフレームに取り込んだり ましてやjavascriptを動作させるなどセキュリティ上とんでもない という都合のようでした。 確かにフレームを使っての勝手なページの取り込みなんかを無制限で 許可してしまうと、scriptによっては関数名やobject名の重複や混在が 発生しやすくなり、ユーザに被害に合わせてしまう恐れが高くなります。 マウスオーバーでのスワップイメージ程度ならともかく、window.openなどになると 物騒ということで、無効化されていたのかもしれないです。 まーはっきりとはわかりませんが、、。 とにかく、ありがとうございました。 大変助かりました!
補足
たびたびの回答ありがとうございます。 また、いただいたアドバイスを使って修正してみましたが、やはりうまくいきません。 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を直接埋め込むようなことって 出来ないでしょうか。