ExternalInterface

">in ">in ">in

flash ActionScrtip提供的外部訪問接口,用於Flash虛擬機與ActiveX 容器(ActiveX container))應用程式或 容器應用程式 (Container application)通信。接口定義addCallback()及call()兩個方法及一個屬性available。
用法:
因為在Flash幫助中已詳細說明了Flash與JavaScript容器之間的通信過程,此處不贅述。現以在含有FLASH控制項的VS(VC)應用程式為例說明:
容器訪問Flash控制項:
A:flash代碼:
//導入
import flash.external.ExternalInterface;
//回調聲明
if (flash.external.ExternalInterface.available){
ExternalInterface.addCallback("flashDoSth", null, flashDoSth);
}
//回調定義
function flashDoSth(param:TYPE):TYPE{
//do sth here;
//return sth;
}
B:VS(VC)代碼:
在需要FLASH執行上述定義的函式代碼段,寫入
m_flash.CallFunction(strXML);
//說明:
m_flash即Flash控制項變數;
strXML即為容器傳向Flash的數據,為XML類型字元串,在JS網頁中,數據直接傳輸使用,但在控制項容器如VS(VC)中,容器與控制項數據傳方式為:數據(VS/VC)----XML數據---數據(Flash)。
一般的組織方式:
容器向Flash傳遞數據為字元串"STR",strXML應該寫為:
"<invoke name="flashDoSth" returntype="xml"><arguments><string>STR</string></arguments></invoke>"
容器向Flash傳遞數據為數字222,strXML應該寫為:
"<invoke name="flashDoSth" returntype="xml"><arguments><number>222</number></arguments></invoke>"
容器向Flash傳遞數據為布爾,strXML應該寫為(以下方式之一):
"<invoke name="flashDoSth" returntype="xml"><arguments><true/></arguments></invoke>"
"<invoke name="flashDoSth" returntype="xml"><arguments><false/></arguments></invoke>"
當然,以上這種寫法麻煩,現在網上有tinyxml,用起來很方便。可利用tynyxml封裝了一個類,用來VS(VC)向Flash傳遞數據或解析來自Flash的XML數據,包括稍複雜的數據,如數組(一維)、結構體等。大家如果經常用到數據傳輸,最好是封裝,不然太麻煩,且數據量太少。
Flash訪問容器:
A:flash代碼:
//導入
import flash.external.ExternalInterface;
//向VS(VC)提出調用請求:
if (flash.external.ExternalInterface.available){
if (String(ExternalInterface.call("itemType", 數據)) != "OK") {
//容器收到成功後,此處繼續其它處理
}
}
//說明:上述代碼中“數據”可以為Flash中任意數據類型,包括Object.
"itemType"用於在容器程式OnFlashCall..()中判別來自於Flash中不同的請求。
B:VS(VC)中代碼,同樣,容器中將收到的數據為xml格式,必須提取有效數據;
//添加以下事件回響
void OnFlashCall..(LPCTSTR request)
{
//解析request(xml數據字元串),獲得"itemType"及數據
//根據"itemType"分類,處理數據,數據處理成功{
m_examAdmin.SetReturnValue("<string>OK</string>");
}
}
關於call()方法,解析過程依然是利用訪問鏈式結構,獲得相應數據。

相關詞條

相關搜尋

熱門詞條

聯絡我們