btmup Blog

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

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
-, , , , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

jQueryとprototype.jsを同時に使うには

最近、JavaScriptのライブラリを使って動きを付けたりすることが多くなってきました。 特に多用するのが、ライブラリの代表格である「jQuery」と「prototype.js」の2つ。 ただ、どち …

no image

JSライブラリ「jQuery」と「prototype.js」の特徴。

数あるJavascriptライブラリの中で代表的な「jQuery」と「prototype.js」。 今までは何らかの機能が必要になった際にググったり本で調べたりして、見付けたものをベースに何とか形にし …

no image

リンクしているパスから JavaScript(jQuery)でファイル名を抽出する方法。

PHP には「basename()」や「dirname()」という便利な関数があり、それぞれファイル名とディレクトリ名を、指定したパスから抽出することができます。 しかし、JavaScript にそん …

no image

ActionScriptとモーショントゥイーンとの関係について

フレームにActionScriptを記述している場合、ターゲットのムービークリップにモーショントゥイーンを設定してたら効かないっぽい。 ということに今日気付きました。 今までにもエラーはないのに何故か …

no image

IE6、IE7 で「識別子、文字列または数がありません」というスクリプトエラーが発生する。

最近 jQuery を使うことが多く、それに伴ってデバッグ作業が増えてきました。 その中でもちょくちょく目にするのが「識別子、文字列または数がありません」というエラー。 主に IE6、IE7 で発生し …