Web 制作のことを中心に、ちょっとした Tips などを掲載しています。「自分用メモ」が基本スタンス。

btmup Blog

ActionScript JavaScript・jQuery

ActionScript 3.0 で Javascript を呼び出してウィンドウを閉じる方法。

投稿日:

ググっても情報がなぜか少ないので、とりあえずメモ的にアップ。

window.open() なんかで開いたサブウィンドウを、テキストリンクやボタンで閉じるための方法です。

HTML でウィンドウを閉じる

HTML ではこんな書き方をするヤツですね。

<a href="javascript:window.close();">このウィンドウを閉じる</a>

input タグを使う場合は、こんな感じ。

<input type="button" value="このウィンドウを閉じる" onClick="window.close()" />

Flash でウィンドウを閉じる

AS2 であれば、

on (release) {
getURL("javascript:window.close();");
}

と書けば動いてくれました。
(但し、MacOS9 + IE という古い環境では落ちることがあるそうで、「FLASH-JP」のCLOSEボタンJavascript:window.close();で強制終了に詳細と対応策が載ってます)

AS3だと getURL が使えません。
というか、そもそもの仕様が大幅に見直されているので、書き方もかなり変わっています。
詳しいことはよく分からないので、とりあえず結論だけ。
以下のように書けば、ウィンドウは閉じてくれます。

close_mc.addEventListener(MouseEvent.CLICK, closeClick);
function closeClick(evt:MouseEvent):void {
	ExternalInterface.call("window.close()");
}

イベントリスナーを設定して、関数を呼び出すのはお約束。
で、Javascript を ActionScript と絡めて使いたいときは、「ExternalInterface.call」を使えば良いようです。

window.close() だけじゃなく、他の Javascript についても、「("〜")」の部分を書き替えれば使えるみたいですよ。
まぁもちろん引数とか色々使うことの方が多いでしょうから、もっと複雑になってくるんでしょうけど。

window.close() のように単体で完結できる関数は、意外にもこんなシンプルなスクリプトで実現することができます。

ローカル環境では動作しない?

これ、ちょっとハマってしまった現象です。

具体的に検証した訳ではないんですが、どうもローカル環境では上記スクリプトは動作してくれないようです。
恐らく、Javascript 関連が動いてくれません。たぶん全滅。
alert ですら動いてくれませんでした。
(僕の環境は、MacOSX 10.4, Flash CS3, Firefox 3.5。Safari でも動かなかったような気がします)

それに気付かず、自分の書いたスクリプトが悪いんだと思い込んで試行錯誤すること数十分……。
光明が見えてきたのは、以前にサブウィンドウを開く方のスクリプトを使った別のデータを使って試していたとき。
間違いなく動作することを確認したはずなのに、まったく反応せず「あれ? 動いてたはずじゃ……?」となったワケです。
ローカルではウンともスンとも言わなかった「閉じる」ボタンが、サーバーにアップした途端、順調に(?)動いてくれました。

でも何で今まで気付かなかったんだろう……。
何かがバージョンアップしたときに何かの仕様が変わってしまったのか、それとも偶然サーバー側でしか確認していなかったのか……。
謎…………。

皆様も、お気を付けて。




-ActionScript, JavaScript・jQuery
-, , , , , ,

Copyright© btmup Blog , 2024 All Rights Reserved Powered by AFFINGER5.