分享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 强强 阅读(411) 评论(0)  编辑  收藏 所属分类: web技巧Flash


只有注册用户登录后才能发表评论。


网站导航: