最近は ActionScript 3 に移行中、色々と 2 と違う点があって、その度に色々と調べてる。最近さりげなくはまったのがこの flashvars の扱い方。
ActionScript 2 では勝手にスクリプト内の変数に値が代入されたが、 3 では少し違うらしい。
ActionScript 2 で使われていた getURL() 関数は廃止になり、代わりに navigateToURL() を AS3 では使うことになったみたいです。
navigateToURL(new URLRequest("javascript: alert('hoge');"), "_self");
最後の "_self" をつけないとブラウザによっては動作しません。
引き続き ActionScript 3 関連ですが、これは 2 と大分異なり、 2 の時は XML オブジェクトの load() を呼んだりしてたけど、 3 ではこの手のロード関連は、 Loader/URLLoader に集約する感じになっているんじゃないかと思う。
Flash から JavaScript の関数を呼んだり、 JavaScript から Flash の関数を呼んだりしたいことがかなりあって、どんな方法があるのか調べたときのメモ。
ただ単に呼び出す方法が分かっても、JavaScript と Flash のロードし終わるタイミングなんかもあって色々と厄介だったのでその辺の回避方法もついでに書いておく。
Flex で何かと使える TitleWindow をマウスで普通のウインドウみたいにリサイズを可能にしてみた。
そもそもなぜこのコントロールはこんなに中途半端なんだろう。クローズボタンはあるのに。
基本 MouseEvent を拾ってるだけ。
その時のソース。
単純に Web 上にある XML データをロードしたい場合は、 mx:HTTPService と mx:DeataGrid の dataProvider 属性を使って以下のように簡単にできる。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="xmldata.send()" layout="absolute"> <mx:HTTPService id="xmldata" url="http://blog.enjoitech.jp/upload/33_datagrid.xml" useProxy="false"/> <mx:Panel title="xml data"> <mx:DataGrid id="dgUser" dataProvider="{xmldata.lastResult.users.user}"> <mx:columns> <mx:DataGridColumn headerText="Name" dataField="name" /> <mx:DataGridColumn headerText="Gender" dataField="gender" /> </mx:columns> </mx:DataGrid> </mx:Panel> </mx:Application>
もし POST データを渡して動的に変化する値を取得するには。
Actionscript から Application.application.parameters クラスが使える。
まず HTML
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="myflash" width="100%" height="100%" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"> <param name="movie" value="myflash.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#869ca7" /> <param name="allowScriptAccess" value="sameDomain" /> <param name="flashvars" value='my_param=hello'> <embed src="myflash.swf?my_param=hello" quality="high" bgcolor="#869ca7" flashvars='my_param=hello' width="100%" height="100%" name="myflash" align="middle" play="true" loop="false" quality="high" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"> </embed> </object>
このコードからパラメータ my_param を取得するスクリプトが以下
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initVars()"> <mx:Script> <![CDATA[ import mx.controls.Alert; [Bindable] private var param:String; private function initVars():void { Alert.show(Application.application.parameters.my_param); } ]]> </mx:Script>
Alert.show(mx.core.Application.application.url);ドメイン名だけを取得したければ、
Alert.show(URLUtil.getServerName(mx.core.Application.application.url));