• 締切済み

actionscript 3.0 の外部リンク

初めて質問させていただきます。 Flash CS3 のactionscript3.0にて、サイト内リンクのボタンを作成したのですが、 フラッシュを読み込んだ時点で、インスタンスthe URL4がポップアップで開いてきてしまいます。 そのような記述をしていないのでどうしたら良いか分からず… 何かお知恵をお貸しいただけると幸いです。 よろしくお願い致します。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ↓実際に書いたacitonscriptです。URLはダミーです。 //theURL1という変数に代入し、URLRequestのインスタンスを生成 var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); var theURL2:URLRequest = new URLRequest("http://www.222/B.html"); var theURL3:URLRequest = new URLRequest("http://www.333/C.html"); var theURL4:URLRequest = new URLRequest("http://www.444/D.html"); navigateToURL(theURL1); navigateToURL(theURL2); navigateToURL(theURL3); navigateToURL(theURL4); // イベントリスナーの登録 A_btn.addEventListener(MouseEvent.CLICK,gotoURL1); B_btn.addEventListener(MouseEvent.CLICK,gotoURL2); C_btn.addEventListener(MouseEvent.CLICK,gotoURL3); D_btn.addEventListener(MouseEvent.CLICK,gotoURL4); // URL1へジャンプする function gotoURL1(event:MouseEvent):void { var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); navigateToURL(theURL1,"_self"); } // URL2へジャンプする function gotoURL2(event:MouseEvent):void { var theURL2:URLRequest = new URLRequest("http://www.222/B.html"); navigateToURL(theURL2,"_self"); } // URL3へジャンプする function gotoURL3(event:MouseEvent):void { var theURL3:URLRequest = new URLRequest("http://www.333/C.html"); navigateToURL(theURL3,"_self"); } // URL4へジャンプする function gotoURL4(event:MouseEvent):void { var theURL4:URLRequest = new URLRequest("http://www.444/D.html"); navigateToURL(theURL4,"_self"); }

  • wita
  • お礼率33% (1/3)
  • Flash
  • 回答数2
  • ありがとう数1

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

> そのような記述をしていないのでどうしたら良いか分からず… それは,「はぁ?」ですよ。。。 バッチリそのような記述をされているじゃないですか。 これ↓で自動的にそれぞれのリクエストURLが開きます。 navigateToURL(theURL1); navigateToURL(theURL2); navigateToURL(theURL3); navigateToURL(theURL4); この4行を消せば良いだけ(元から書かなければ良いだけ)です。 この4行で,本来4つのページが開くはずですが, 1つしか開かないのは,リクエストの乱発によって最初の3つが無効になるためです。 (=最初の3つが開かないのはセキュリティにはばまれただけ。) それと問題解決とは別件ですが, 2回も同じURLを登録していること自体も変ですよ。 書かれていらっしゃるスクリプトを 「1URL分だけ」に単純化して注釈行を付け直しておきます↓。 簡単なスクリプトなんですから, 1行1行何をしているのか考えてみましょう。 ---1URL分だけに単純化-------------------- //★変数名「theURL1」の URLRequest のインスタンスを生成 // (リクエストURL「http://www.111/A.html」) var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); //☆そのリクエストURLを別窓で開く navigateToURL(theURL1); //「A_btn」にクリック時に動作するイベントリスナーを登録 A_btn.addEventListener(MouseEvent.CLICK,gotoURL1); //クリック時に動作するリスナー関数gotoURL1の定義 function gotoURL1(event:MouseEvent):void { //★変数名「theURL1」の URLRequest のインスタンスを生成 // (リクエストURL「http://www.111/A.html」) var theURL1:URLRequest = new URLRequest("http://www.111/A.html"); // //☆そのリクエストURLを同窓で開く navigateToURL(theURL1,"_self"); } -------------------------------------------- ↑同様のことを2回書いていますよね? navigateToURL(theURL1); を削除するとともに その他の場所についても, どこをどう修正すべきかを考えてみましょう。 (修正箇所や内容は作者の意図によって変わります。) (=修正すべきなのは確かなことですが,どこをどう修正すべきかは私が決めることではありません。)    

wita
質問者

お礼

ご丁寧な解説をいただき、ありがとうございました! フラッシュもプログラム初めて扱うもので実践しながら勉強してます…って言い訳ですね。 私自身、分かったような分かってないような感覚で進んでいました。 本当にありがとうございました。非常に助かりました&参考になりました。

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

スクリプトは上から順に実行されていきます。 navigateToURL は指定された URL を開く命令ですから、var theURL4:URLRequest = new URLRequest の後に書かれているこの命令が実行されて、ページが開いてしまいます。 ボタンの名前(インスタンス名)と開く URL は違っていても、「クリックした時に URL を開く」という動作は共通しています。 少し工夫しますと、スクリプトをすっきりまとめることができます。 次のように考えます。 各リンクボタンを、ムービークリップシンボルとして作成します。 ムービークリップシンボルであれば自分の中に任意の変数を作ることができるので、リンクボタンとして使うムービークリップそれぞれに URLRequest オブジェクトを作成します。このオブジェクトの名前は、全てのリンクボタンで統一の名前にします。 イベント処理関数が呼び出された時に渡される情報を利用して、クリックされたリンクボタンで開く URL を取り出します。 変数を利用しますから、インスタンス名と URL が違うためにリンクボタンの数だけイベント処理関数を作る必要はなくなります。 問題は、ムービークリップごとに異なる URL を設定する方法ですが。 いろいろな方法がありますが、今回は簡単なところで、配列変数を作り、ボタンとして使うインスタンスの参照と URL の情報をペアにして表を作ります。 この表を for ループで順番に見ながらリンクボタンのインスタンスの参照を取り出し、それぞれの中に開く URL を記録するとともに、イベントリスナーを登録します。 * * * スクリプトの一例です。 ステージに、ムービークリップシンボルのインスタンス A_btn ~ D_btn があるとします。 このスクリプトは、メインのタイムラインに記述してください。 (↓ 各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //***  //ムービークリップの参照とリンク先を管理する配列変数  var link_tbl:Array =  [   { clip : A_btn , link : "○○○.html" } ,   { clip : B_btn , link : "△△△.html" } ,   { clip : C_btn , link : "□□□.html" } ,   { clip : D_btn , link : "***.html" }  ];  //クリックされた時のイベント処理関数  function gotoURL( eventObj:MouseEvent ):void  {   //インスタンス内に記録されたURLを開く   navigateToURL( eventObj.target.link_url , "_self" );  }  //各インスタンスの設定  for( var i:Number = 0 ; i < link_tbl.length ; i++ )  {   //設定するムービークリップの参照を取得   var mc:MovieClip = link_tbl[ i ].clip;   //このインスタンスの中にURLRequestオブジェクトを作り、URLを記録する   mc.link_url = new URLRequest( link_tbl[ i ].link );   //ボタン化とイベントリスナーの登録   mc.buttonMode = true;   mc.addEventListener( MouseEvent.CLICK , gotoURL );  } //*** 配列変数とは、名前が同じで管理番号だけが違う、複数の変数の集まりです。 ActionScript の配列変数は、1つの要素の中にさらに仕切りを作り、複数の情報を管理できるようになっています。 今回は1つの要素の中に clip と link という名前の仕切りを作り、clip にリンクボタンとして使うムービークリップの参照、link に開く URL の文字列を入れて、ムービークリップの参照と URL をペアで扱えるようにしています。 この配列変数を for ループで先頭から順に見ていくと、ループの中では、link_tbl[ i ].clip と link_tbl[ i ].link という共通の記述で、各リンクボタンの参照と開く URL を、それぞれ取り出すことができます。 名前が共通なので、リンクボタンが増えた時も、配列変数にリンクボタンとして使うムービークリップの参照と URL を増やすだけで対応できます。 イベント処理関数には、イベントが発生して呼び出された時に、イベントに関する様々な情報が引数として渡されてきます。 この情報の1つに、イベントを検出した対象を表す情報があります。この情報は、仮引数名.target という名前で、イベント処理関数の中で見ることができます。 上記の例ですと、イベント発生時に呼び出される gotoURL の仮引数の名前は” eventObj ”です。 つまり、gotoURL 関数の中では、同じ eventObj.target という表現でも、A_btn がクリックされた時は A_btn を、B_btn がクリックされた時は B_btn を表します。 各リンクボタンには予め、link_url という共通の名前で URLRequest オブジェクトを作り、この中に開く URL が記録してあります。 合わせますと、イベント処理関数の中では  navigateToURL( eventObj.target.link_url , "_self" ); という、変数を利用した1行でそれぞれのリンクボタンに対応する URL に移動でき、イベント処理関数も1つだけで済みます。 - - - - - なお、ボタンシンボルとしてリンクボタンを作ってある場合は、「ライブラリ」パネルでシンボルを選択した状態で右クリックでメニューを開き、「タイプ」メニューから”ムービークリップ”を選ぶと、ムービークリップシンボルに変更できます。 ボタンシンボルの各フレームは、ムービークリップのタイムラインのフレームに1つずつ展開されます。 この状態のまま使うと、作品が再生された途端にムービークリップのタイムラインが連続的に再生され、チカチカしてしまいます。 簡単な変更方法としては、ムービークリップにもボタンシンボルのような機能を持たせる特殊なフレームラベルを利用する方法があります。 まず、ムービークリップのタイムラインのフレーム1に stop(); アクションを記述し、最初のフレームでタイムラインを止めます。 ボタンシンボルのアップ・オーバー・ダウンにあたるフレームにそれぞれ、 _up ・ _over ・ _down というフレームラベルを付けて、完成です。 特殊なフレームラベルによるボタンのような振る舞いは、buttonMode プロパティが true の時だけ有効になります。 シンボルをボタンからムービークリップに変更しても、ステージに既に配置したインスタンスはボタンのインスタンスになっている場合があります。 インスタンスを選択した状態で「プロパティ」パネルでタイプを確認し、ボタンになっているようであればムービークリップに変更してください。

関連するQ&A

  • flash as3でメーラーを起動して任意のメールアドレスを入力させた

    flash as3でメーラーを起動して任意のメールアドレスを入力させたいのですが、以下のようにしてもうまくいきません。どなたかご教授お願いします。 mc.addEventListener(MouseEvent.CLICK, gotoURL); function gotoURL(event:MouseEvent):void{ var theURL:URLRequest=new URLRequest("アドレス"); navigateToURL(theURL); }

    • ベストアンサー
    • Flash
  • actionscriptでの複数リンク

    こんにちは、いまフラッシュでサイトのトップページをつくっています。 ボタンを複数表示して、それぞれ同窓でリンクするようにしたいです。 ボタンを押して複数表示するようにはなったのですが、なぜかどのボタンを押しても同じリンク先に飛んでしまいます。URLは変えましたが、超初心者で関数のことなどがよくわかっていないため、ご教授いただけたらと思います。 一つめのボタンのアクションへの記述 click_btn.addEventListener(MouseEvent.CLICK,onHomeClick) function onHomeClick(e:MouseEvent):void { trace(e.type) var url:String="http://サイト1"; var urlrequest:URLRequest=new URLRequest(url); navigateToURL(urlrequest, "_self"); } 二つ目のボタンへの記述 click_btn2.addEventListener(MouseEvent.CLICK,onHomeClick) function onHomeClick2(e:MouseEvent):void { trace(e.type) var url:String="http://サイト2"; var urlrequest:URLRequest=new URLRequest(url); navigateToURL(urlrequest, "_self"); } 調べてコピペしたものが主です。初歩的な質問で申し訳ないのですが、よろしく御願いいたします。

  • Flashで出来ること2

    ActionScriptについての質問です。 今、ActionScript3.0を勉強中です。 全面Flashを作っていますが、ボタンをクリックしたときにメールソフトへジャンプする方法がいまいち分かりません。 自己流でURLリンクを真似て //イベントリスナーの登録 question.addEventListener(MouseEvent.CLICK,gotoURL2); //URL2へジャンプする function gotoURL2(event:MouseEvent):void{ var theURL2= new URLRequest("mailto:*********@yahoo.co.jp"); navigateToURL(theURL2,"_blank"); } という風にしてみたのですが、クリックするとメールソフトのほかに新しいウインドウがメールアドレスをURLと置き換えて開かれてしまいます。 この場合いったいどうするとメールソフトのみが開かれるのでしょうか??

  • as3でボタンにリンクをはる方法!

    質問ばかりで申し訳ないですが、お世話になります。 flashCS4&Actionscript3を使っているものです。 「ボタンにリンクをはる方法を探しています。 (どうしても 1093のシンタックスエラーになってしまい、困っています。)」 現在作成しているものは、以下のような構造です。 ************************************************************* ステージ ↓ムービークリップ【インスタンス名(menu_mc)】 ________________________________________ ・ボタン【インスタンス名(btn1_btn)】 ・ボタン【インスタンス名(btn2_btn)】 ・ボタン【インスタンス名(btn3_btn)】 ________________________________________ *************************************************** menu_mcの中で、以下のように記述しました。 btn1_btn.addEventListener(MouseEvent.CLICK,gotowebpage1); function gotowebpage1(event : MouseEvent) :void { navigateToURL(new URLRequest("​http://www.yahoo.co.jp"));​ } btn2_btn.addEventListener(MouseEvent.CLICK,gotowebpage2); function gotowebpage2(event : MouseEvent) :void { navigateToURL(new URLRequest("​http://www.yahoo.co.jp"));​ } btn3_btn.addEventListener(MouseEvent.CLICK,gotowebpage3); function gotowebpage3(event : MouseEvent) :void { navigateToURL(new URLRequest("http://www.yahoo.co.jp")); } すると、1093のシンタックスエラーになってしまいます。 うまく動作させる為には、他にどんな作業を行ったらいいのでしょうか、 よろしくお願いします!!!

    • ベストアンサー
    • Flash
  • ムービークッリプを所定の位置まで動かしたいのですが

    AS初心者なのですが、この度AS3.0を覚える事になり、現在勉強中です。 数冊本を購入し、読んではいるのですが基本的な文法の説明と簡単な作例(と言う程でもないサンプル)だけ載っているものが殆どで、その文法をどう使って組んで行けば良いのかが殆ど解らない状況です。 早速質問なのですが 三つのボタンにロールオーバー、ロールアウト、オンクリック時動きをつけたいのですが、どうも上手く行きません。 ソースは stop(); bt01.addEventListener(MouseEvent.CLICK, gotoURL1); bt01.addEventListener(MouseEvent.ROLL_OVER, bt01_RollOver); function gotoURL1(event:MouseEvent):void { var theURL1:URLRequest = new URLRequest("URL"); navigateToURL(theURL1); } function bt01_RollOver(event:MouseEvent):void { main_bg1.addEventListener(Event.ENTER_FRAME, movebg_01); function movebg_01(event:Event):void { main_bg1.x -= 60; main_bg2.x -= 60; if(main_bg1.x >= -960) { main_bg1.removeEventListener(Event.ENTER_FRAME, movebg_01); } } } 以上です。 すべてフレームに記述しています。 先輩方、どうかご教授よろしくお願い致します。

  • フラッシュのマウスイベント

    フラッシュのマウスイベントがうまくいかないので教えてください。 ボタンはい列(5個)をしてそれぞれにインスタンスを付けました。 ロールオーバーで背景画像の入れ替えクリックで特定のURLへ飛びたいのですが 飛ぶことはできてもロールオーバーの記述がうまくいきません どう書けばいいのか教えてください 素人で説明見ながらなのでイフ とかエルスの使い方もよくわかりません。 ちなみに下記はクリックしたら出てきた記述で思い通りに動いています。 できたら出てくる画像がフェードインにしたいです 同じタイムラインに画像を配置してそれぞれMC-1とか名前も付けましたが 記述を探しても全くわかりません よろしくお願いします URL1.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_5); function fl_ClickToGoToWebPage_5(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL2.addEventListener(MouseEvent.CLICK,fl_ClickToGoToWebPage_6); function fl_ClickToGoToWebPage_6(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL3.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_7); function fl_ClickToGoToWebPage_7(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL4.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_8); function fl_ClickToGoToWebPage_8(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); } /* クリックして Web ページに移動 */ URL5.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_9); function fl_ClickToGoToWebPage_9(event:MouseEvent):void { navigateToURL(new URLRequest("http://www.○○"), "_blank"); }

  • as3 addchildで生成したMCにリンクを張る

    下記のようなことがしたいのですが、 エラーになります。 //空のムービークリップを作成 var mc:MovieClip = new MovieClip(); mc.name = "test"; ~中略(画像を読み込んでます)~ stage.addChild(mc); stage.mc.addEventListener(MouseEvent.CLICK, function(event) { var theURL:URLRequest = new URLRequest("http://yahoo.co.jp"); navigateToURL(theURL); }); 生成したMCにリンクを張る場合は どのようにしたらよいのでしょうか。 ご教授お願いいたします。

    • ベストアンサー
    • Flash
  • ActionScript3.0のリンク指定で別ウインドウで開かせたくな

    ActionScript3.0のリンク指定で別ウインドウで開かせたくないのですが、 以下のように記載していますが、別ウインドウで開いてしまいます。 is.clear_button.addEventListener(MouseEvent.CLICK,goContact); function goContact(e:MouseEvent):void{ var cntPage:URLRequest=new URLRequest("http://www.google.co.jp/"); navigateToURL(cntPage); } 別ウインドウで開かせないようにするには、どこを修正すればよろしいでしょうか?

  • 外部から読み込んだ画像にリンクをつけたい

    ActionScript3.0についての質問です。 ボタンをクリックした時に外部から画像を読み込んで、 読み込んだ画像にそれぞれに外部リンクをつけたいのですが、 リンクのつけ方が分かりません。 ボタンをクリックして外部から画像を読み込むところまではできたのですが、 その画像にリンクをつけるところで困っています。 超初心者ですので、できるだけ現状のプログラムを生かして変更したいのですが… どなたか分かる方がいらっしゃいましたら、教えていただきたいです。 よろしくお願いいたします。 【Main.as】 package { import flash.display.Sprite; import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.display.SimpleButton; public class Main extends Sprite { private var contentMC:MovieClip; private var contentLoader:Loader; //コンストラクタ public function Main(){ //外部ファイルを配置するムービークリップの生成 contentMC = new MovieClip(); contentMC.x=0; contentMC.y=0; addChild(contentMC); //Loaderオブジェクトを生成 contentLoader = new Loader(); contentMC.addChild(contentLoader); //ボタン処理 my1_btn.addEventListener(MouseEvent.CLICK,my1Handler); my2_btn.addEventListener(MouseEvent.CLICK,my2Handler); my3_btn.addEventListener(MouseEvent.CLICK,my3Handler); } //各ボタンをクリックしたときに外部ファイルを読み込む private function my1Handler(evt:MouseEvent):void{ var url="img/flashimg01.jpg"; loadContent(url); } private function my2Handler(evt:MouseEvent):void{ var url="img/flashimg02.jpg"; loadContent(url); } private function my3Handler(evt:MouseEvent):void{ var url="img/flashimg03.jpg"; loadContent(url); } //外部ファイル読込 private function loadContent(url){ var req:URLRequest = new URLRequest(url); contentLoader.load(req); } } }

    • ベストアンサー
    • Flash
  • フラッシュで同一ウィンドウ内にリンク

    フラッシュで同一ウィンドウ内でリンクさせるのはどうすればいいのでしょうか… "_self"を入れると、「引数の数は1個以下でなければいけません」といったエラーが出てしまいます。 現在のアクションスプリクトは以下です。 info.addEventListener(MouseEvent.CLICK,gotowebpage1); function gotowebpage1(event : MouseEvent):void { navigateToURL(new URLRequest("ttp://~","_self")); } また、こちらも原因不明なのですが相対パスにするとクリックしても反応しなくなります…。 どなたか原因を教えていただけると助かります。

    • ベストアンサー
    • Flash

専門家に質問してみよう