分享java帶來的快樂

          我喜歡java新東西

          flash中ExternalInterface不會造成方法覆蓋

          在JavaScript與Flash的通信一文中我介紹了利用ExternalInterface來實現的JS與AS雙向通信,有朋友跟我提出疑問如果AS或者JS中都定義了同名函數,那么會造成方法覆蓋嗎?這的確是個需要考慮的問題,通過測試證明,即使出現了同名方法的定義,它們也是相互獨立的,不會造成方法覆蓋。

            一、AS調用JS方法時出現同名方法(查看實例)

           
              AS代碼如下:
             
              import flash.external.*;
              var v =ExternalInterface.available;
              t_btn.onRelease = function (){
                  //調用JS函數
                  var s = ExternalInterface.call("say","JS函數調用成功!")
                  //調用AS本地函數
                  s +=say("\n本地函數調用成功!");
                  r_txt.text = s;
              }
              //AS本地函數
              function say(s){
                  return s;
              }
            
              HTML代碼:
             //定義一個JS函數
             function say(txt){
                  return txt;
              }

           可以看到在JS中定義了一個say方法供AS調用,現在我們在AS中定義了一個同名的say方法來驗證它們是否會出現覆蓋。結果證明它們不會覆蓋,都工作得很好。(PS:不錯~)


          二、JS調用AS方法時出現同名方法(查看實例)


            AS代碼如下://導入包
                  import flash.external.*;
                  //提供JS訪問的函數名
                  var _method:String = "say";
                  //指定本地函數中this變量的作用域,可設置為null留空
                  var e_area:Object =null;
                  //AS內部函數名
                  var method:Function = say;
                  //將函數注冊到容器列表
                  var wasSuccessful:Boolean = ExternalInterface.addCallback(_method, e_area, method);
                  //查看注冊是否成功
                  if(wasSuccessful){
                      result_txt.text = "函數注冊成功";
                  }
                  //本地的函數
                  function say(txt:String) {
                      result_txt.text = txt;
                  }

              HTML代碼如下:
           <div>
            <form>
             <input type="button" onclick="callExternalInterface()" value="JS調用AS方法" />
            </form>
            <script>
             function callExternalInterface() {
              thisMovie("demo").say("Hello,World");
             }
             //瀏覽器兼容訪問DOM
             function thisMovie(movieName) {
              if (navigator.appName.indexOf("Microsoft") != -1)
              {
               return window[movieName]
              }else{
               return document[movieName]
              }
             }
             //定義一個JS本地函數
             function say(s){
              alert(s);
             }
            </script>
           </div>


            可以看到在AS中定義了一個say方法供JS調用,現在我們在JS中定義了一個同名的say方法來驗證它們是否會出現覆蓋。結果證明它們不會覆蓋,都工作得很好。(PS:也不錯~)


            通過上面的兩個例子我們可以得出結論在使用ExternalInterface時即使定義了同名方法,也不會造成方法覆蓋,你大可放心使用

          posted on 2012-04-19 22:52 強強 閱讀(442) 評論(0)  編輯  收藏 所屬分類: web技巧Flash

          主站蜘蛛池模板: 大城县| 克拉玛依市| 万源市| 武清区| 永靖县| 郧西县| 赞皇县| 大冶市| 太仓市| 都匀市| 西藏| 普兰店市| 福安市| 安阳市| 邵阳县| 拉孜县| 萨迦县| 渝中区| 清丰县| 安乡县| 漳州市| 利津县| 大安市| 探索| 岗巴县| 信阳市| 秦皇岛市| 曲水县| 安溪县| 长武县| 焦作市| 贺兰县| 忻城县| 高碑店市| 广德县| 长顺县| 镇安县| 赞皇县| 仙居县| 龙门县| 三亚市|