flex與js互動淺析
阿新 • • 發佈:2019-01-26
呼叫方法例如:ExternalInterface.call("UploadComplete",oldName,uidName,_dir+"/"+uidName+type);
第一個是js方法名,後面幾個是給這個js方法傳的引數。這個方法必須在網頁的js中註冊,否則會呼叫失敗。
需要注意的是呼叫之前需要檢查網頁的js是否已完成載入,用ExternalInterface.available可是判斷。
注:這種呼叫方法是可以有返回值的,例如:var m:String = ExternalInterface.call(f,"New Title");
但是這個返回值不能有時延(例如js需要進行ajax操作),否則m=null。因為flex是非同步的。
<mx:Script> <?xml version="1.0" encoding="iso-8859-1"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> <mx:Script> import flash.external.*; public function callWrapper():void { var f:String = "changeDocumentTitle"; var m:String= ExternalInterface.call(f,"New Title"); trace(m); } </mx:Script> <mx:Button label="Change Document Title" click="callWrapper()"/> </mx:Application> Html頁面中有如下函式定義: <SCRIPT LANGUAGE="JavaScript"> function changeDocumentTitle(a) { window.document.title=a; return"successful"; } </SCRIPT>
2.js呼叫flex方法
js要呼叫flex方法,首先在flex中必須註冊,將as方法註冊為js可呼叫的方法。例如:ExternalInterface.addCallback("ConfirmGroup",ConfirmGroup);
第一個是js中呼叫時用的名稱,第二個是as中定義的方法。
在ie瀏覽器中呼叫方法為: document.getElementById("mapContent").ConfirmGroup(1);
mapContent為flash的id。
注:它也是可以有返回值的。
示例:
AS:
<mx:Script> import flash.external.*; public function myFunc():Number { return 42; } public function initApp():void { ExternalInterface.addCallback("myFlexFunction",myFunc); } </mx:Script>
JS:
<SCRIPT language='JavaScript' charset='utf-8'> function callApp() { var x = MyFlexApp.myFlexFunction(); alert(x); } </SCRIPT> <button onclick="callApp()">Call App</button>