- ベストアンサー
getURLでのウィンドウの表示について
複数のサムネイルを配置し、それぞれがクリックされた時に他サイトにジャンプするScriptを記述しました。 現在のウィンドウは保持し、一番最初にクリックされた時に新しいウィンドウを開き、以降はそのウィンドウにロードしたいのですが、どのようにしたら良いのか教えて頂けませんか?。 getURL ("http://www.xxx.ne.jp/index.html", "aaa") ; このような記述をしました。ウィンドウに名前を付けて、それを指定すれば次回からはそのウィンドウが使われるのではと思って。 でも、次々と新しいウィンドウが立ち上がります。 どうぞ宜しく御願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
予め JavaScript で名前を付けたウィンドウが開かれていれば、getURL の第2引数で指定してそのウィンドウに表示できるのですが、このウィンドウが開かれていない時に getURL でウィンドウ名を指定すると、_blank と同じ扱いになってしまいます。 FSCommand で JavaScript にURLのパラメータを渡し、JavaScript の window.open で表示する、という方法はいかがでしょう。 「パブリッシュ設定」→「 HTML 」タブの「テンプレート」で、「 Flash(FSCommand サポート)」を選択してパブリッシュします。 作られた HTML ファイルを、メモ帳などで開いてみてください。 <script language="JavaScript"> タグの中で、***_DoFSCommand( *** にはムービーの名前が入ります)という JavaScript の関数が定義されているかと思います。 「コードをここに配置します。」というコメント文がありますから、そこに、次のようなスクリプトを書きます。 if( command == "Open_Window" ) { window.open( args , "aaa" ); } FSCommand の第1引数が” Open_Window ”だった時に、” aaa ”と名付けたウィンドウに第2引数で渡されてきたURLを表示する、という意味になります。 話は Flash に戻りまして。 サムネイルがクリックされた時のスクリプトは、次のように書きます。 open_url = "http://www.xxxx.com/fld/art.aspx?id="+"0"+_parent.var_str+"&sid="+_parent.var_product ; fscommand( "Open_Window" , open_url ); FSCommand の動作は「ムービープレビュー」では確認できません。先ほど変更を加えた HTML 文書の方で確認してみてください。 なお、新たにパブリッシュする時に、せっかく変更した HTML が上書きされて消えたりしないように、「パブリッシュ設定」の「形式」タブで、HTML のチェックを外しておくといいでしょう。 ウィンドウ” aaa ”の細かい設定(サイズ・リサイズの可否・ツールバーの表示など)も可能です。 こちらは JavaScript の話になりますので、詳しくは JavaScript の解説書等をご参考になさってください。 また、「 JavScript 」のカテゴリーには詳しい方がたくさんいらっしゃいますから、そちらで質問してみると、有益な回答が得られると思いますよ。
その他の回答 (5)
- DPE
- ベストアンサー率85% (666/776)
パブリッシュされた HTML を見る限り、<script> ~ </script> タグまでの間のスクリプトを <body> タグ内に置くだけで、いいと思うのですが。 FSCommand の動作原理については私もあまり詳しくはありませんが・・・ <object> タグと <enbed> タグ内に、id というパラメータがあります。Flash から FSCommand が送られてきた時に、おそらく、これと DoFSCommand 関数の先頭にある名前(通常は swf ファイルの名前)を照合して呼び出しているのではないでしょうか。 となると、別の HTML ファイルに持っていく際、id と DoFSCommand 関数の名前が違っているなどの原因で、Flash から送られてきた FSCommand が上手く処理されていない可能性も考えられます。 DoFSCommand 関数の中では、関数名以外にも、ムービーの名前が使われている部分が何箇所かあります。 テスト用などで作った DoFSCommand 関数部分を流用するなら、メモ帳の「置換」機能を利用して、元のムービー名を、実際に表示するムービーの名前( swf ファイルの名前)に置き換えると、置き換え忘れがなくていいと思いますよ。 ムービーをパブリッシュする時に、一旦、FSCommand サポートのテンプレートで表示用の HTML ファイルを作って#3に書いたような変更を加え、実際に使う HTML ファイルには、DoFSCommand 関数部分と一緒に、ムービーの表示部分である <object> ~ </object> タグも持っていくようにすると、間違いも少なくなるのではないでしょうか。 この際、swf ファイルと HTML ファイルを違うフォルダに置く場合は、swf ファイルのパスにご注意ください。なお、ムービーとそれを表示する HTML ファイルが違うフォルダにあっても、FSCommand の動作に支障はありません。 ------------ Flash から JavaScript を呼び出す時、渡す引数が”***.html”のように決まった文字列であれば、こんな面倒な FSCommand を使わなくても、getURL だけで十分です。 しかし、Flash 内の変数を利用して getURL で呼び出す JavaScript に引数を渡そうとすると、どうも、その変数の中身が展開されないまま渡されてしまい、JavaScript に上手く情報が渡らないようです。 例えば、Flash のボタンが押された時の処理として getURL( "JavaScript:alert('テスト');" ); こうして JavaScript を呼び出すと、Flash のボタンからでも、「テスト」と表示される警告ウィンドウを表示させることができます。 ところが、 alert_text = "テスト"; getURL( "JavaScript:alert(alert_text);" ); と、引数として Flash にある変数を指定すると、警告ウィンドウは出てこなくなります。 今回は Flash で利用している変数の値を連結して作った文字列をURLとして渡したいとのご様子でしたので、Flash にある変数を利用しても JavaScript に引数を渡せる FSCommand をご紹介いたしました。 ちょっと面倒で扱いが難しいのが難点ですけれど、Flash と JavaScript 間の情報の受け渡しに強く、いろいろと応用も利きます。 頑張ってください。
お礼
いつもありがとうございます。 objectタグ内に 「id="xxxxxx"」と言うパラメータや 「<param name="allowScriptAccess" value="sameDomain" />」と言うようなパラメータが追加されていたり、embedタグ内にも 「swLiveConnect=true id="showroom" name="showroom" align="middle" allowScriptAccess="sameDomain"」 このような記述が追加されていましたので、objectタグ内も全てコピーしてみたら正常に動きました。 これからも宜しく御願いします。
- amountainblast
- ベストアンサー率33% (63/186)
こんにちは。 私はFlashでそこまでの制御をしないでHTMLにJavaScriptを記入して制御しています。 まずHTMLのhead部分に新しく開ける窓の設定をします。 function rei01(jump){ subwin = window.open('ex/ren01.html','subwin','width=350,height=450'); subwin = window.subwin.location.href = jump; } 次にFlashで on(release) { getURL("JavaScript:void(rei01(\"開けたいファイル名\"))"); } とスクリプトを記述すれば、大丈夫です。 これはまずJavaScriptで新しく開く窓の関数rei01を作ります。この時に設定してある ex/ren01.htmlはとりあえず開くファイルですので、存在するファイルでしたら何でも構いません。 あとはFlashでJavaScriptのrei01を呼び出し引数に開けたいファイル名を設定するだけです。 説明がわかりにくいかと思いますが、参考程度になればと思いました・・・。
補足
ありがとうございます。 申し訳ありませんが、何せ素人なもので分からない事が多いのでお聞きします。 function rei01(jump){ subwin = window.open('ex/ren01.html','subwin','width=350,height=450'); subwin = window.subwin.location.href = jump; } rei01と言うのは、Flashとの紐付けのKeyword、width/heightは開くウィンドウのサイズ指定だと分かるのですが、それ以外が全然分かりません。知らなくてもそのまま使えばいいのかも知れないのですが、ご存知でしたら教えて頂きたく、どうぞ宜しくお願い致します。
- DPE
- ベストアンサー率85% (666/776)
#3の > ***_DoFSCommand( *** にはムービーの名前が入ります) ここの箇所にご注目ください。 ムービーの名前は、最初は「名称未設定-1 」になっています。このままパブリッシュすると、この名前で swf や HTML ファイルがパブリッシュされます。 FSCommand を受理する関数名にもムービー名が使われますので、 function 名称未設定-1_DoFSCommand(command, args) と、関数名には利用できない日本語である上に、「 -1 」と演算子まで入ってしまいます。 また、この中で使われている変数もムービーの名前を元に命名されますから、文法がメチャクチャになっています。 「名前を付けて保存」で、日本語やハイフン(” - ”)を使わずに名前を付けて保存してからパブリッシュし、もう1度試してみてさい。 DoFSCommand 関数は他の関数とは違い、関数の名前に重要な意味があります。(おそらく、複数の Flash ムービーを再生するページでも、それぞれのムービーから発行された FSCommand を処理できるように、ムービー名と関数名で区別しているのではないかと思います) FSCommand を処理する関数名は、ムービーの名前+”_DoFSCommand ”でなければならないという決まりがあります。 ムービーの名前を変えた時は、関数名の変更もお忘れなく。
お礼
いつもありがとうございます。 ご指摘の点を修正したら、問題なくウィンドウが立ち上がりました。 「ムービー」と言うのは、FLASH(SWF)ファイル名と言う認識で宜しいんですよね。
補足
すみません、教えて下さい。 お教え頂いた内容で問題無く動いたのですが、既存のHTMLファイルに組み込む際にどの部分をコピーすれば良いのでしょうか?。 <script language="JavaScript"> : : : </script> この部分だけをコピーしてBODYタグの直下にPasteしたのですが、動きません。生成したHTMLそのままをコピーしないといけないのでしょうか?。 宜しく御願い致します。
http://www.xxxx.com/fld/art.aspx?id="+"0"+_parent.var_str+"&sid="+_parent.var_product これはホームページのアドレスですか? (・・;) アドレスに"とか使えたかな…? 専門じゃないので詳しい事分かりませんが、 とちょっと疑問に…(^^;)。 あと、変数の使い方(認識が)まちがっているかも、 aa = "http://www.xxxx.com/fld/art.aspx?id="+"0"+_parent.var_str+"&sid="+_parent.var_product 実際に操作されるのは、変数名ではなく、変数値です。(文字じゃなくて数字) 【例】 aa=1; bb=2; と設定されていたら…。 aa=bb; ↑aaの値は2、aaと記述された文字が、bbって文字に変わるわけではないですよ? 私の認識が間違っていたら申し訳ない(^^;)
こんにちは、まだまだ私自身、未熟ものですが、失礼いたします(__) on (release) { getURL ("JavaScript:window.open('http://www.xxx.ne.jp/index.html/','aaa');void(0);") } で、どうでしょうか?
お礼
アドバイスありがとうございます。 ただ、お教え頂いたとおりScriptを若干手直しして記述しましたが、思い通りの動作は適いませんでした。 "http://www.xxxx.com/fld/art.aspx?id="+"0"+_parent.var_str+"&sid="+_parent.var_product ; こんなややこしいものなんです。 そこで、 aa = "http://www.xxxx.com/fld/art.aspx?id="+"0"+_parent.var_str+"&sid="+_parent.var_product ; として、 getURL ("JavaScript:window.open(aa,'aaa');void(0);")としましたが、動きません。
補足
うぅ~ん、駄目でした。 テスト的に、以下の仕様でFlashファイルを作成しました。 1フレームに矩形を作成し、ムービークリップに変換し「aaa」と言うインスタンス名を付ける。 そのムービーのアクションに以下を記述。 on(release) { open_url = "http://www.yahoo.co.jp" ; trace(upen_url) ; fscommand( "Open_Window" , open_url ); } HTMLは以下の通りです。 <script language="JavaScript"> <!-- var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1; // Flash コマンドですべての FSCommand メッセージを処理する function 名称未設定-1_DoFSCommand(command, args) { var 名称未設定-1Obj = isInternetExplorer ? document.all.名称未設定-1 : document.名称未設定-1; if( command == "Open_Window" ) { window.open( args , "aaa" ); } } // Internet Explorer をフックするコード (抜粋) これで動かしてみましたが、ブラウザが立ち上がる気配もありません。 どこに誤りがあるのでしょうか?。