重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

本体SWFに、「外部SWFのファイル名」と「リンク先」が書かれたXMLを読込んでいます。
本体SWFで外部SWFを表示させ、そのSWFにリンク(A)を設定しています。
(図の様な感じです)
このリンク(A)は効くのですが、外部SWFにはファイル自体にリンク(B)を設定しているのですが、このリンク(B)が効かないので、困っています。
ActionScriptは3で書いています。

【外部SWFに書いたリンクの設定】は、
btn.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(e):void {
var url:URLRequest = new URLRequest("http://goo.ne.jp/");
navigateToURL( url, "_blank");
}

..................です。

ActionScript2で、on(release)で書いたものを
読込んだ場合はちゃんとリンクしたのですが、
どのようにしたらよいのでしょうか。
ご教授お願いいたします。

「外部SWF内で設定したリンクが効かない」の質問画像

A 回答 (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秒の実行間隔をとっていますが
これでも一般的には良い行為だとは決して言えません。
    • good
    • 0
この回答へのお礼

詳しく書いていただいてありがとうございます。
なるほど、navigateToURLをたしかに連続実行しています。
おっしゃられる通り、複数ページが同時に表示されるのは、よくないですよね。

AS2 の getURL を「gaibu.swf」に張った場合、
「gaibu.swf」に設置したボタンを押すと、
「main.swf」のリンクは実行されずに、「gaibu.swf」内のリンクだけが開いたので、
(1ページだけ開いたので)
これと同じことを、AS3 の navigateToURL を「gaibu.swf」に張ったのですが、
たしかにnavigateToURLを連続実行してしまっています。

リンクの設定は、場所を固定するか、どちらか一方に張ることにします。
的確にご指摘いただき本当にありがとうございました。

お礼日時:2011/02/05 14:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!