- ベストアンサー
外部SWF内で設定したリンクが効かない
- 外部SWFに設定したリンク(A)は効くが、ファイル自体に設定したリンク(B)が効かないため困っている。ActionScriptは3で書かれている。
- 外部SWF内で設定したリンク(A)は効くが、ファイル自体に設定したリンク(B)が効かない。ActionScriptは3で書かれており、リンク(B)を効かせる方法を教えてほしい。
- 外部SWF内のリンク設定(A)は正常に動作しているが、ファイル自体に設定したリンク(B)が機能していない。質問者はActionScript3を使用しており、リンク(B)を動作させる方法を知りたい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
外部XML とか 外部SWF とかは関係なくて navigateToURL を 複数回 連続で 実行しているところが問題なのではないでしょうか。 メインのSWF 「main.swf」 と 外部SWF 「gaibu.swf」 が同じフォルダにあるとします。 「gaibu.swf」 内には 「btn」 というインスタンス名のボタンが用意してあって, そのボタンが存在するフレームに ----------------------- btn.addEventListener(MouseEvent.CLICK,clickHandler); function clickHandler(e):void { var url:URLRequest = new URLRequest("http://goo.ne.jp/"); navigateToURL( url, "_blank"); } ----------------------- と書かれていらっしゃるわけですよね。 また単独で 「gaibu.swf」 を開いた場合は ボタンをクリックすると 「goo」サイト が別窓で開かれるのですよね。 そこまでは問題ありませんよね? そこまで問題がなければ その 「gaibu.swf」 をロードする 「main.swf」 のフレームには 次のようなスクリプトを書きます。 ---------------------------------- //ローダーの作成と外部SWFのロードと配置 var my_req:URLRequest=new URLRequest("gaibu.swf"); var my_ld:Loader = new Loader(); my_ld.load(my_req); this.addChild(my_ld); //ローダーをクリック時に clickHandler を実行 my_ld.addEventListener(MouseEvent.CLICK,clickHandler); //clickHandler の定義 function clickHandler(e:MouseEvent):void { //タイマーインスタンスを作成(1000ミリ秒後に1回実行) var myTimer:Timer = new Timer(1000, 1); // timerHandler を指定ミリ秒後に実行 myTimer.addEventListener(TimerEvent.TIMER, timerHandler); //タイマースタート myTimer.start(); } //timerHandler の定義 function timerHandler(e:TimerEvent):void { //OKWaveをリクエストとするURLRequestを作成 var url:URLRequest=new URLRequest("http://okwave.jp/"); //そのURLを別窓で開く navigateToURL( url, "_blank"); } ---------------------------------- これでパブリッシュして 表示された「main.swf」 内の「gaibu.swf」内のボタンをクリックすると 「goo」と「OKWave」が開くと思います(多分)。 navigateToURL の連続実行は失敗します。 そもそも複数ページが同時表示されるようにリンクを張ること自体がナンセンスですよ。 いわゆる「ブラクラ」行為です。 AS2 の getURL の頃は 複数窓を同時に開くことはできたと言っても そういう質の悪いこと(質の悪い行動に結びつくこと)は ブラウザのセキュリティによってはばまれていた可能性が大きかったと思います(確かMacとかでは通用しなかったような?)。 上の例では一応1秒の実行間隔をとっていますが これでも一般的には良い行為だとは決して言えません。
お礼
詳しく書いていただいてありがとうございます。 なるほど、navigateToURLをたしかに連続実行しています。 おっしゃられる通り、複数ページが同時に表示されるのは、よくないですよね。 AS2 の getURL を「gaibu.swf」に張った場合、 「gaibu.swf」に設置したボタンを押すと、 「main.swf」のリンクは実行されずに、「gaibu.swf」内のリンクだけが開いたので、 (1ページだけ開いたので) これと同じことを、AS3 の navigateToURL を「gaibu.swf」に張ったのですが、 たしかにnavigateToURLを連続実行してしまっています。 リンクの設定は、場所を固定するか、どちらか一方に張ることにします。 的確にご指摘いただき本当にありがとうございました。