|
在各種瀏覽下html嵌入flash/flex以及flex和java相互調(diào)用的簡單例子 JAVA參考代碼: <!-- javascript 代碼如下--> <script type=”text/javascript”> function testPageInit(){ alert(“hello flash”); var myFlashMovie=window.document[“myFlashMovie”]; var dataStr=”10,20,30” myFlashMovie.setTestValue(dataStr); } function changePageTitleName(){ document.title=”Flex Changed the Title”; } </script> <!-- html 代碼如下--> <table width=”100%” height=”100%”> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="myFlashMovie" width=”100%” height=”100%” type=”application/x-oleobject”> <param name=”quality” value="high"/> <param name=”wmode” value="transparent"/> <param name=”bgcolor” value="#869ca7"/> <param name=”allowScriptAccess” value="sameDomain"/> <param name=”FlashVars” value="onload=testPageInit"/> <embed src="test.swf" width=”100%” height=”100%” type="application/x-shockwave-flash" play=”true” name="myFlashMovie" id="myFlashMovie" align=”middle” bgcolor=”#FFFFFF” flashvars=” onload=testPageInit” loop=”false” wmode=” transparent” allowScriptAccess=” sameDomain” pluginspage=http://adobe.com/go/getflashplayer> </object > </table> FLEX參考代碼: <?xml version=”1.0” encoding=”utf-8”> <mx:Application creationComplete=”init()” xmlns:mx=”http://www.adobe.com/2006/mxml” Layout=”absolute”> <mx:Script> <![CDATA[ private var _testValue:String; private function init():void{ ExternalInterface.addCallback(“setTestValue”, setTestValue); } public function setTestValue(str:String):void{ _testValue= str; } private function callJavascript():void{ var JSFunctionName:String=”changePageTitleName”; ExternalInterface.call(JSFunctionName,””); } </mx:Script> <mx:Button click=” callJavascript()”/> <mx:Label text={_testValue}/> </mx:Application> 注意事項(xiàng): 1. html嵌入flex調(diào)用在javascript中調(diào)用flex方法的例子流程 上面舉的例子的功能是通過外面?zhèn)鱾€(gè)值來改變FLEX內(nèi)部一個(gè)變量的值 首先html頁面加載頁面元素,將object加載進(jìn)來,加裁object后通過onload方法自動(dòng)調(diào)用javascript方法testPageInit(); 其次在testPageInit()方法里我們要調(diào)用對(duì)象ID為myFlashMovie的flex內(nèi)部方法,要獲取object的對(duì)象通過用document.getElementById(“myFlashMovie”)這個(gè)方法來獲得,但是考慮到跨瀏覽器的問題我們采用以下任意一種方式來獲取ID, 一是window.document[“myFlashMovie”] (在IE,FF,chrome,opera,safari等都適用) 二是window.document. myFlashMovie(這個(gè)未度過,應(yīng)該可以) 然后通過定義的“object變量.方法”的形式調(diào)用即可,通過傳遞的參數(shù)給FLEX內(nèi)部方法傳值。 再然后,flex內(nèi)部方法是如何獲得到外部javascript的調(diào)用呢?首先加載flex的時(shí)候會(huì)運(yùn)行flex 的主應(yīng)用程序,我們可以在主應(yīng)用程序加裁完之后提供一個(gè)自動(dòng)調(diào)用初始化方法,在這個(gè)方法里來回調(diào)javascript方法就可以了。具體參考上面的例子如ExternalInterface.addCallback(“setTestValue”, setTestValue); 最后通過調(diào)用setTestValue方法來改變FLEX當(dāng)前_testValue變量的值。 2. html嵌入flex,由FLEX來調(diào)用 javascript的例子流程 上面實(shí)現(xiàn)的功能是在flex中點(diǎn)擊一個(gè)按鈕就會(huì)使html的標(biāo)題名稱發(fā)生改變。 首先html頁面加載頁面元素,將object加載進(jìn)來,加裁object后通過onload方法自動(dòng)調(diào)用javascript方法testPageInit(); 其次在testPageInit()方法里我們可以調(diào)用對(duì)象FLEX內(nèi)部方法(參考上面流程例子)也可以不調(diào)用,我們這個(gè)例子主要是在FLEX調(diào)用JAVASCRIPT,當(dāng)全部加載完了FLEX,在FLEX里我們可以加一個(gè)按鈕控件用于點(diǎn)擊測(cè)試,來觸發(fā)方法,此方法里具體寫如何調(diào)用JAVASCRIPT方法(參考上面代碼)。 并且在JAVASCRIPT中定義和changePageTitleName名字一樣的方法。 討論: 1. 我發(fā)現(xiàn)當(dāng)需要獲取object對(duì)象時(shí)用window.document[“myFlashMovie”];才能在跨瀏覽器時(shí)獲得到對(duì)象。 2. 當(dāng)要對(duì)object對(duì)象進(jìn)行顯示時(shí)用document.getElementById(“myFlashMovie”).style.display=””;才好使,當(dāng)要隱藏時(shí)用document.getElementById(“myFlashMovie”).style.display=”none”;才好使。用window.document[“myFlashMovie”] .style.display=””;或window.document[“myFlashMovie”] .style.display=” none”;不好使。 3. 對(duì)于IE來講不需要embed部分也可以得到flex,但對(duì)于其他的瀏覽可能不兼容所以需要走embed部分,在這里需要指定id和name且名稱一樣,而且flashvars參數(shù)要用。保持object 中的<param>的參數(shù)項(xiàng)和參數(shù)值和embed里的參數(shù)相同。 |
|
|