js調用Flex中的方法,向flex中傳參,flex調用js

首先,有了一個swf文件,test.swf,同時也有一個自動生成的html文件,test.html。

然後,在另外一個文件,test.jsp中,通過iframe,引入了test.html,即引入了swf。


現在想要在test.jsp中,向flex傳參,並調用flex中的方法,我採用的方法是:


首先,在jsp中寫一個調用flex的方法,如下

function initSWF(){
    //得到swf的object

    var obj = window.frames["rightframe"].ReverseQuery;    //rightframe是iframe的名字,ReverseQuery是在test.html中,引入swf做object的id。
    //調用它的方法
    
    var start = "<%=startPoint%>";
    var end = "<%=endPoint%>";
    
    obj.showParams(start,end);
}

在html中,有方法

/*在flex中只能調用本頁面的js方法*/
function initSWF(){
parent.initSWF();
}

在flex,有如下方法:

public function showParams(start:String,end:String):void{
Alert.show(start);
Alert.show(end);
}


這時,需要建立一個打開他們之間通信的橋樑了,在flex的初始化時,要使用

ExternalInterface.addCallback("showParams",showParams);   //前者是它暴露給js的方法名,後者是它在flex中的方法名。


這樣,理論上就可以實現調用了。將initSWF方法放在頁面的onload方法中即可實現。


但是產生一個問題,如果flex在頁面中沒有加載成功時,會報找不到對象的錯誤。因此,需要我們在確保swf文件加載完成後,再調用swf中的方法。

但監聽它加載完成顯然有點浪費感情,於是,我們採用的策略是,等它加載完,再調用js的initSWF方法,即可將環節全部打通。


因此,在flex的初始化時,加入

//調用載入頁面的initSWF方法
ExternalInterface.call("initSWF"); //要將它放在註冊對外方法之後進行。


大功告成。



有需要注意的地方:


在flex當中調用js的方法,這個方法只能寫在引入swf的文件中,但我在jsp中引入了html,所以只能是在html中的js,是調用父頁面的js方法。

而在jsp中對於swf文件的引用,要藉助window.frames["rightframe"]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章