- 2008-09-03 (水) 17:02
- ActionScript2.0 | JavaScript
今回やりたいことは、
ボタンを押すと別ウィンドウでFlashのスペシャルサイト表示。
開いたスペシャルサイトから元のページを操作(ページ遷移、focusを当て前面に出す)。
個人的には同じウィンドウで全て遷移して欲しいところですが、これでやってみたいと想います。
参考にさせて頂いたページ
- Flash / JavaScript Integration Kit – blog.burnercrew.com
- trick7.com blog: Flash / JavaScript Integration kit 日本語訳
- ヒム・カンパニー:翻訳記事全リスト文字表示(62番)
1. Flash / JavaScript Integration Kitから最新版をダウンロードしておきます。
2. 1は一寸置いといて下準備。index.htmlからspecial.htmlを別ウィンドウで開く設定をします。
<head>~</head>部分に以下を記述。
<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>内該当する箇所に以下のような記述をします。
<a href="javascript:void(0);" onclick="SWwopen()">ウィンドウを開く</a>
これで別ウィンドウを開く準備ができました。続いて別ウィンドウで開くspecial.htmlの設定をします。
ActionScriptからJavaScriptを操作する設定をします。まずhtml側。
installationフォルダ内のJavaScriptFlashGateway.js、JavaScriptFlashGateway.swfを今回使用するフォルダに移動。
HTMLにFlashProxyのインスタンスを生成するJavaScriptを記述します。
※xxxの部分は任意です。
<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を記述。
<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を記述。
<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クラスのインスタンスを作成します。
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の関数を呼び出す以下の記述をします。
proxy.call("javaScriptMethodName", "arg1", new Object());
俺の場合、html側の記述で関数名がGoWin()、引数にURLを取る設定になっています。
Flash側ではボタンを2つ作り、btn_01、btn_02と名前をつけてそれぞれ押すとその設定が入るようにしています。
ソースは以下のようになりました。
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");
};
参考にさせて頂いたページも結構前の記事だったので、今はもっと好い方法があるのかもしれませんね。
- Newer: お腹時計
- Older: deliciousからのpostが文字化け
Comments:0
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 チマナコィズムシィステム
