ASだけでJSを動作させる
ExternalInterfaceを使うとJavaScriptと連携できるんだけど、HTMLにJSを書くのはめんどくさいしJSファイルをサーバーにアップするのも手間なのでASだけでJSを動作させるテスト。Flashサイトで良く使いそうなJSをまとめてクラスにしてみた。staticメソッドにしてあるので、インポートした後はnewせずにクラス名から直接呼び出せる。とりあえず10種類用意したので、随時追加していこうかなー。
上記のデモのHTML見てもらえば分かるけど、このFlashから指示してるJSの記述は一切していない。なのでswfファイルだけサーバーにアップすればJSも動く。HTMLにJSのリンクタグとか仕込まなくてもいいのでちょっとだけ楽できるよと。ドキュメントクラスからの使い方はこんな感じ。
private function onClick(e:MouseEvent):void
{
var browser:String = JsUtils.getBrowser();
switch(e.currentTarget.name)
{
//-----[ポップアップを開く]
case "btn1":
var url:String = "http://www.google.co.jp/";
//-----[safariのみ_blankで対応]
if (browser != null && browser.indexOf("Safari") >= 0) navigateToURL(new URLRequest(url), "_blank");
else JsUtils.windowOpen(url, 400, 400, 0, 0, true, false, "yes");
break;
//-----[ウインドウを揺らす]
case "btn2":
JsUtils.windowShake();
break;
//-----[アラートを表示]
case "btn3":
JsUtils.alert(browser);
break;
//-----[現在のURLを取得]
case "btn4":
JsUtils.alert(JsUtils.getLocation());
break;
//-----[ウインドウの移動]
case "btn5":
JsUtils.windowMove(0, 0);
break;
//-----[ウインドウのリサイズ]
case "btn6":
JsUtils.windowResize(400, 400);
break;
//-----[クッキーを保存]
case "btn7":
JsUtils.setCookie("cookiename", "hogehoge", 7);
break;
//-----[クッキーを取得]
case "btn8":
JsUtils.alert(JsUtils.getCookie("cookiename"));
break;
//-----[タイトルの変更]
case "btn9":
JsUtils.setTitle("fugafuga");
break;
//-----[タイトルの取得]
case "btn10":
JsUtils.alert(JsUtils.getTitle());
break;
}
}
やってる事は大したこと無くて、ExternalInterface.call()の中で関数を文字列としてコールしてるだけ。Flash側からは文字列でも、JSに渡された瞬間に関数になって実行さるイメージなのかな。リファラーも取れるので、GoogleやYahooからどんなキーワード検索で飛んできたのかもFlash側に渡してやれる。LPOみたいにFlash内のレイアウトや配置をキーワードに合わせて動的に変更したりも出来るだろうから、色々使い道はあるかも。
JsUtilsクラスはこちらからどうぞ。