2009.09.14
category
comments

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クラスはこちらからどうぞ。

■追記
IEではObjectタグのidに「external」を追加しておかないとエラーになるみたい。

2008.12.10
category
tag
comments

PHPで動的生成されたXMLをjQueryで読み込むときの注意

WordPressとかのPHPから動的生成されたxmlをjQueryを使って読み込むときにワナがあるので注意が必要。Flashでは普通に読み込めたので気付かなかったけど、動的生成のxmlをjQueryで読み込むとエラーになる。調べたらPHPから出力されるxmlのヘッダーのContent-Typeをtext/xmlに設定していないことが原因だった。なのでヘッダーを書き換えてやるとうまく読み込めるようになる。

WordPressでxmlを出力する場合は最初にこれを入れること。

header('Content-Type: text/xml; charset='.get_option('blog_charset'), true);
2007.05.02
category
comments

javascriptでマウスホイール検知

いまさらだけどflashでマウスホイール検知をやってみる。マックでも動くようにとexternalInterfaceでjavascriptと連携。要はアップ方向かダウン方向にホイールが回ってるかをif文で判別してFlashに返してやればよいわけ。自作スクロールクラスに組み込むと良さげ。

http://adomas.org/javascript-mouse-wheel/

2007.04.12
category
comments

flashとjavascriptとphpでやりとりするには

flashとjavascriptのやり取りは「ExternalInterface」を使う。

function getJavascript()
{
   var obj = new Object();
   obj.infoTitle = document.URL;
   obj.infoUrl = document.title;
}
import flash.external.*;

if(ExternalInterface.available)
{
   infoObj = ExternalInterface.call("getJavascript");
   title.text = infoObj.infoTitle;
   url.text = infoObj.infoUrl;
}
else
{
   title.text = "ExternalInterfaceを利用することが出来ません";
}

javascriptからのデータがinfo.objの中に格納される。

続いて、flashとphpのやり取りは「sendAndLoad」を使う。

$message= $_POST["message"];
echo "responce=".$message."をflashに返します";
//-----[送受信オブジェクトのインスタンス化]
var loadLV:LoadVars = new LoadVars();
var sendLV:LoadVars = new LoadVars();

//-----[渡したい変数名と値を定義]
sendLV.message = "hoge";

//-----[コールバック関数を定義]
loadLV.onLoad = function(success)
{
   if (success == true)
   {
      trace(loadLV.responce);
   }
   else
   {
      trace("通信エラー");   //hogeをflashに返します"
   }
}

//-----[sendAndLoadメソッドを使ってデータの送受信を行う]
sendLV.sendAndLoad("phpファイルのパス", loadLV, "POST");
page 1 / 11