Home > ActionScript2.0 | JavaScript > Flash JavaScript Integration Kitを使ってFlashからJavaScriptを操作する

Flash JavaScript Integration Kitを使ってFlashからJavaScriptを操作する

今回やりたいことは、
ボタンを押すと別ウィンドウでFlashのスペシャルサイト表示。
開いたスペシャルサイトから元のページを操作(ページ遷移、focusを当て前面に出す)。
個人的には同じウィンドウで全て遷移して欲しいところですが、これでやってみたいと想います。

サンプル

参考にさせて頂いたページ

1. Flash / JavaScript Integration Kitから最新版をダウンロードしておきます。

2. 1は一寸置いといて下準備。index.htmlからspecial.htmlを別ウィンドウで開く設定をします。
<head>~</head>部分に以下を記述。

Java Script
<script type="text/javascript">
<!--
function SWwopen(){
	window.open("special.html","SWindow", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=400");
    }
//-->
</script>

続いて<body>~</body>内該当する箇所に以下のような記述をします。

XHTML
<a href="javascript:void(0);" onclick="SWwopen()">ウィンドウを開く</a>

これで別ウィンドウを開く準備ができました。続いて別ウィンドウで開くspecial.htmlの設定をします。

ActionScriptからJavaScriptを操作する設定をします。まずhtml側。
installationフォルダ内のJavaScriptFlashGateway.js、JavaScriptFlashGateway.swfを今回使用するフォルダに移動。
HTMLにFlashProxyのインスタンスを生成するJavaScriptを記述します。
※xxxの部分は任意です。

Java Script
<script type="text/javascript" src="xxx/JavaScriptFlashGateway.js"></script>
<script language="javascript">
var lcId = new Date().getTime();
var flashProxy = new FlashProxy(lcId, "xxx/JavaScriptFlashGateway.swf");
</script>

body内にswfを表示するJavaScriptを記述。

Java Script
<script type="text/javascript">
var tag = new FlashTag("xxx/xxxx.swf", swfのheight, swfのwidth); // last two arguments are height and width
tag.setFlashvars('lcId='+lcId);
tag.write(document);
</script>

さらに元ウィンドウをページ遷移させ、focusを当てるJavaScriptを記述。

Java Script
<script type="text/javascript">
<!--
function GoWin(WO) {
	if (opener.closed) {
		NewWin=window.open("","MWindow");
		NewWin.location.href=WO;
		window.opener.focus();
		}
    else { opener.location.href=WO;
	window.opener.focus();
	}
}
//-->
</script>

続いてFlash側。"source/flash/actionscript" 内のライブラリファイルをクラスパスが通る場所に置いて、importします。さらに、JavaScriptProxyクラスのインスタンスを作成します。

Action Script
import com.macromedia.javascript.JavaScriptProxy;
var proxy:JavaScriptProxy = new JavaScriptProxy();

ここで「"com.macromedia.javascript.JavaScriptProxy"がロードされませんでした。」というエラーが出て暫く足踏みしたのですが、参考にさせて頂いたFlash / JavaScript Integration Kit – blog.burnercrew.comの、

Windows 版の Flash は asファイルが BOM つきの UTF-8 で保存されてないとダメらしい。
JavaScriptProxy.as と JavaScriptSerializer.as を Flash で一度開いてから保存しなおすことによって解決。

を発見してひと安心。仰る通りにして解決。
続いてJavaScriptの関数を呼び出す以下の記述をします。

Action Script
proxy.call("javaScriptMethodName", "arg1", new Object());

俺の場合、html側の記述で関数名がGoWin()、引数にURLを取る設定になっています。
Flash側ではボタンを2つ作り、btn_01、btn_02と名前をつけてそれぞれ押すとその設定が入るようにしています。
ソースは以下のようになりました。

Action Script
import com.macromedia.javascript.JavaScriptProxy;
var proxy:JavaScriptProxy = new JavaScriptProxy();

//インスタンス宣言
var btn_01:Button;
var btn_02:Button;

//変数宣言
var pageNum:Number;

//ブロードキャスター用オブジェクト
var objCast:Object = new Object();

//カスタムブロードキャスター初期化
AsBroadcaster.initialize(objCast);

//リスナー用オブジェクト
var objListener:Object = new Object();

//objListenerをobjCastのイベントリスナーに登録
objCast.addListener(objListener);

//関数定義
objListener.eventComplete = function():Void  {
	switch (pageNum) {
		case 1 :
			page = "page1.html";
			break;
		case 2 :
			page = "page2.html";
			break;
	}
	trace(pageNum);
	proxy.call("GoWin",page,new Object());
};

btn_01.onRelease = function() {
	pageNum = 1;
	objCast.broadcastMessage("eventComplete");
};

btn_02.onRelease = function() {
	pageNum = 2;
	objCast.broadcastMessage("eventComplete");
};

参考にさせて頂いたページも結構前の記事だったので、今はもっと好い方法があるのかもしれませんね。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.chimanaco.net/archives/20080903170226.php/trackback
Listed below are links to weblogs that reference
Flash JavaScript Integration Kitを使ってFlashからJavaScriptを操作する from チマナコィズムシィステム

Home > ActionScript2.0 | JavaScript > Flash JavaScript Integration Kitを使ってFlashからJavaScriptを操作する

Search
Feeds
Meta
works
MYUNGMI'S PARK+
友人のイラストレーターのポートフォリオサイトです。ゴキゲンなイラストがいっぱい!
AnotherBookmark
1日1カワイ子ちゃん
やっぱダッフルでしょ

Return to page top