アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

非常に初歩的な質問かと思いますが、教えてください。
いろんなサイト様を探してみたのたですが、なかなか上手くいかず・・・
使用ソフトは、suzukaです。
簡単なムービークリップは作るのですが、アクションスクリプトはあまり使用したことがありません。

Flashバナーから外部ページへリンクする際、「confirm」を使用して、外部リンクということを表示させたく思っています。
イメージとしては、Flashバナーをクリックすると【外部ページを開きます】とダイアログが表示されます。
そのダイアログの、【OK】をクリックすると別ウィンドウで外部ページが開き、キャンセルをクリックするとダイアログだけが消えます。
【OK】と【キャンセル】、いずれの場合もFlashバナーが貼ってあるページは残ります。

フレームアクションには下記のように記述していますが、イメージ通りになりません。
*****************************************************************

// 空のムービークリップ link_mc を深度 0 に作成
this.createEmptyMovieClip("link_mc", 0);

// link_mc にステージの大きさの透明な塗りを作図
link_mc.beginFill(0x000000, 0);
link_mc.moveTo(0, 0);
link_mc.lineTo(Stage.width, 0);
link_mc.lineTo(Stage.width, Stage.height);
link_mc.lineTo(0, Stage.height);
link_mc.lineTo(0, 0);
link_mc.endFill();

// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
getURL("javascript:window.confirm('外部ページを開きます') ? window.open('リンク先のアドレス','target') ");

*****************************************************************

ダイアログは表示されるのですが、【OK】をクリックしても【キャンセル】をクリックしても、別ウィンドウで外部ページが開いてしまいます。
しかも、Flashバナーが貼ってあるページには、真っ白な画面で[object]と表示されてしまいます。

イメージ通りにすることは可能でしょうか?

誠に恐れ入りますが、どうぞ宜しくお願いいたします。

A 回答 (2件)

親元のページが 真っ白画面で[object] 状態になるのは、


window.open の実行で戻り値 「Wondowオブジェクト」 が返ってくるからだと思います。

戻り値表示を回避するには
link_mc をクリックしたときの動作を以下のようにすれば良いと思います。

組み合わせによって数通りの書き方ができますが
一応、3~4例書いてみます。

※「AAA.html」 は、仮リンク先URL です。
※getURL の ( ) 内が改行しているように
  見えるかもしれませんが改行ナシの1行です。

---------------------------
// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
getURL("javascript:if(window.confirm('外部ページを開きます')){window.open('AAA.html');void(0)}");
};
---------------------------
  ↑または↓
---------------------------
// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
getURL("javascript:if(window.confirm('外部ページを開きます')){void(window.open('AAA.html'))}");
};
---------------------------
  ↑または↓
---------------------------
// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
getURL("javascript:window.confirm('外部ページを開きます') ? void(window.open('AAA.html')) : void(0)");
};
---------------------------

あと、
「ものは試し」と思ってやってみましたら
これでもできました↓。
---------------------------
// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
getURL("javascript:if(window.confirm('外部ページを開きます')){window.open('AAA.html')};this.href");
};
---------------------------

以上では
一応 ActionScript の修正案を書いていますが
内容的には ActionScript は全く関係なくて、
全て JavaScript の仕様に対する対処法ですよ。
(HTML から a href を実行するときの対処法でも同様の事項が出てきます。)
 

 
=/=/=/=/=/=/=/=/=/=/=

その他
Suzuka で [SWF8] を生成する設定にしている場合は ExternalInterface クラスが使えますから
これを使ってみても良いかもしれません。

※同じく 「AAA.html」 は、仮リンク先URL です。
※同じく ExternalInterface.call の ( ) 内が
  改行しているように見えるかもしれませんが
  改行ナシの1行です。

---------------------------
// link_mc をクリックしたときの動作を定義
link_mc.onRelease = function() {
// リンク先 を 別窓で開く
flash.external.ExternalInterface.call("function(){if(window.confirm('外部ページを開きます')){window.open('AAA.html')}}");
};
---------------------------
 
    • good
    • 0
この回答へのお礼

イメージ通りに出来ました!
JavaScript記述の方でしたか。
大変失礼を……(汗)

ご回答ありがとうございました。
とても助かりました。

お礼日時:2011/03/31 09:43

FlashのActionScript「getURL」に全ての「JavaScript」を実行させていますが、FlashのAcrionScriptに直接JavaScriptを実行するのではなく、HTML側に関数(function)として定義し、FlashのActionScript側では、その関数(function)を実行させてみてはいかがでしょうか?



▼HTML側
<script language="javascript" type="text/javascript">
function poppage(linkadd){
if(window.confirm('外部ページを開きます')){
window.open(linkadd);
}
}
</script>

▼Flash ActionScript側
getURL("javascript:poppage('リンク先のアドレス')");

正常に動作しなかったらごめんなさいm(_ _)m
    • good
    • 0
この回答へのお礼

早速のご回答、ありがとうございます。

私も、HTML側に実行させたら楽だと思うのですが、このFlashバナーは他の方も使う予定がありまして。
出来れば、先方の負担を軽減できないかなと(汗)。

でも、難しいようであれば、HTML側にも記述をお願いするしかないですよね。

お礼日時:2011/03/29 22:08

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