云自無心水自閑

          天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
          posts - 288, comments - 524, trackbacks - 0, articles - 6
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          一、在JavaScript中調用Flex方法
          在Flex中可以用ExternalInterface來調用Flex的方法,途徑是通過在Flex應用可調用方法列表中添加指定的公用方法。在Flex應用中通過調用addCallback()可以把一個方法添加到此列表中。addCallback將一個ActionScript的方法注冊為一個JavaScript和VBScript可以調用的方法。
          addCallback()函數的定義如下:
          addCallback(function_name:String, closure:Function):void
          function_name參數就是在Html頁面中腳本調用的方法名。closure參數是要調用的本地方法,這個參數可以是一個方法也可以是對象實例。

          舉個例子:
          <mx:Script>
          ??? import flash.external.*;
          ??? public function myFunc():Number {
          ??????? return 42;
          ??? }
          ??? public function initApp():void {
          ??????? ExternalInterface.addCallback("myFlexFunction",myFunc);
          ??? }
          </mx:Script>
          那么在Html頁面中,先獲得SWF對象的引用,也就是用<object .../>聲明的Swf的Id屬性,比如說是MyFlexApp。然后就可以用以下方式調用Flex中的方法。
          <SCRIPT language='JavaScript' charset='utf-8'>
          ??? function callApp() {
          ??????? var x = MyFlexApp.myFlexFunction();
          ??????? alert(x);
          ??? }
          </SCRIPT>
          <button onclick="callApp()">Call App</button>



          二、在Flex中調用 JavaScript
          你可以調用Html頁面中的JavaScript,通過與JavaScript的交互,可以改變Style,調用遠程方法。還可以將數據傳遞給Html頁面,處理后再返回給Flex,完成這樣的功能主要有兩種方法:ExternalInterface()和navigateToUrl()。
          在Flex中調用JavaScript最簡單的方法是使用ExternalInterface(),可以使用此API調用任意JavaScript,傳遞參數,獲得返回值,如果調用失敗,Flex拋出一個異常。
          ExternalInterface封裝了對瀏覽器支持的檢查,可以用available屬性來查看。
          ExternalInterface的使用非常簡單,語法如下:
          flash.external.ExternalInterface.call(function_name: String[, arg1, ...]):Object;
          參數function_name是要調用的JavaScript的函數名,后面的參數是JavaScript需要的參數。
          舉個例子說明如何調用JavaScript函數
          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>


          評論

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2006-12-04 10:44 by IT DAIMON
          非常感謝,這篇文章對于我這個初學者來說真是太有幫助了 ^_^

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用[未登錄]  回復  更多評論   

          2008-04-28 21:09 by gg
          good

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2008-10-29 10:01 by 楊愛友
          根據我剛才的迷惑給你添加一句,樓主的“Html頁面中有如下函數定義:”這句中html頁面指的是與你mxml文件對象的頁面,比如上面的flex應用名為first.mxml,那么那段Javascript函數加在first.html里。
          其實在eclipse里運行mxml時運行的就是對應的html文件,只是這個html文件里被嵌入了mxml。

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2009-07-07 13:26 by 三十歲
          好像firefox中不行啊

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2009-09-17 20:38 by HalZhang
          正要用,學習了

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2012-04-06 09:47 by 孫波波
          @楊愛友
          請問clean一下就沒了,這怎么辦?

          # re: Flex與JavaScript的交互:調用JavaScipt或者被JavaScript調用  回復  更多評論   

          2012-09-13 10:48 by heson
          嗯,還不錯。
          主站蜘蛛池模板: 定兴县| 柳江县| 洛扎县| 卢湾区| 同仁县| 元朗区| 泽普县| 平果县| 保德县| 汝州市| 普定县| 镇沅| 台中市| 广灵县| 通榆县| 长汀县| 安泽县| 新巴尔虎左旗| 城市| 平谷区| 临洮县| 万年县| 宁国市| 同心县| 社旗县| 淮安市| 贵州省| 漯河市| 绥德县| 增城市| 正蓝旗| 蕉岭县| 平谷区| 双鸭山市| 随州市| 紫阳县| 新竹市| 乌审旗| 鞍山市| 安徽省| 梅河口市|