1. 程式人生 > >flex與js互動淺析

flex與js互動淺析

呼叫方法例如: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>
複製程式碼