FLEX中調用JavaScript

其實只是FLEX中的一個“小”方法或技巧


涉及這個類:

flash.external
public final class ExternalInterface
繼承ExternalInterface --> Object
語言版本: ActionScript 3.0
運行時版本: Flash Player 9, AIR 1.0

ExternalInterface 類是外部 API,這是一個在 ActionScript 和 Flash Player 容器之間實現直接通信的應用程序編程接口,例如,包含 JavaScript 的 HTML 頁。Adobe 建議用 ExternalInterface 實現 JavaScript 與 ActionScript 之間的所有通信。



eg:比如我們要獲取當前訪問頁面的url


var add:String=ExternalInterface.call("window.location.href.toString", 1);
                Alert.show(add);

112655671.png


後面兩個參數是幹啥的呢?查看FLEX的api文檔:



public static function call(functionName:String, ... arguments):*


調用由 Flash Player 容器公開的函數,不傳遞參數或傳遞多個參數。如果該函數不可用,調用將返回 null;否則,它返回由該函數提供的值。允許在 Opera 或 Netscape 瀏覽器中使用遞歸;在這些瀏覽器上,遞歸調用將生成 null 響應。(Internet Explorer 和 Firefox 瀏覽器上支持遞歸。)


如果該容器是 HTML 頁,則此方法在 script 元素中調用 JavaScript 函數。


如果該容器是某個其他 ActiveX 容器,此方法將使用指定的名稱分派 FlashCall ActiveX 事件,並且該容器將處理該事件。

如果該容器承載 Netscape 插件,您可以寫入對新 NPRuntime 接口的自定義支持或嵌入 HTML 控件以及在 HTML 控件內嵌入 Flash Player。如果嵌入 HTML 控件,則可以通過本機容器應用程序的 JavaScript 接口與 Flash Player 進行通信。

注意:對於在瀏覽器中運行的本地內容,僅當 SWF 文件以及包含它的網頁(如果有)位於受信任的本地安全沙箱中時,才允許調用 ExternalInterface.call() 方法。此外,還可以在包含 SWF 內容的 HTML 頁中設置 objectembed 標籤的 allowNetworking 參數,以防止 SWF 文件使用此方法。有關詳細信息,請參閱 Flash Player 開發人員中心主題:安全性

在 Flash Player 10 和 Flash Player 9 Update 5 中,如果啓用了彈出窗口阻止程序,則某些 Web 瀏覽器限制使用此方法。在這種情況下,只有在響應用戶事件(例如,在鼠標單擊或按鍵事件的事件處理函數中)時才能成功調用此方法。


參數 :


functionName:String — 要在容器中調用的函數的字母數字名稱。若使用非字母數字函數名稱,則將導致出現運行時錯誤(錯誤 2155)。可以使用 try..catch 塊處理此錯誤。

...arguments傳遞到容器中的函數的參數。您可以指定零個或多個參數,參數之間用逗號分隔。它們可以是任何 ActionScript 數據類型。如果調用的是 JavaScript 函數,則會自動將 ActionScript 類型轉換爲 JavaScript 類型;如果調用的是某個其他 ActiveX 容器,則會在請求消息中對參數進行編碼。
返回

* — 從容器接收的響應。如果調用失敗,則會返回 null 並引發錯誤;例如,如果容器中沒有此類函數、接口不可用、發生遞歸(使用 Netscape 或 Opera 瀏覽器)或出現安全問題。



這樣就很明白了,比如我們調用Math中的max方法:

eg:

var add:String=ExternalInterface.call("Math.max", 555, 888);
                Alert.show(add);

112652905.png




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