js调用as方法

as 代码:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:viewer="com.esri.viewer.*"
               xmlns:managers="com.esri.viewer.managers.*"
               pageTitle="ArcGIS Viewer for Flex"
              creationComplete="init()">
    <fx:Script>
        <![CDATA[
            import flash.external.ExternalInterface; ①
            import mx.controls.Alert;
            import flash.external.*;
            import com.esri.viewer.AppEvent;
            
            private function init():void
            {②    
                ExternalInterface.addCallback("test",test);
                ExternalInterface.addCallback("flexFunction1",jsCallBack1);
                ExternalInterface.addCallback("flexFunction2",jsCallBack2);
                
            }
            public function test():void
            {//无参方法
                Alert.show(" js调用Flex成功!");
            }
            private function jsCallBack1(params:*):void  
            {//参数传递方法
                 Alert.show("Call Method:" + String(params));  
            } 
            private function jsCallBack2():void 
            { //根据Widgetid 打开Widget的方法
            ViewerContainer.dispatchEvent(new AppEvent(AppEvent.WIDGET_RUN, 4));     
            }  
        ]]>
    </fx:Script>

js代码:

<body  onload="init()"><script language="JavaScript" type="text/javascript">
     function test()
     {④
      getSWF("index").test();
      getSWF("index").flexFunction1("myHtmlRequest!"); 
      getSWF("index").flexFunction2();
     }
     function getSWF(movieName) 
     {  
      if (navigator.appName.indexOf("Microsoft") != -1) 
         {  
              return window[movieName];  
         } 
         else 
         {  
             return document[movieName]; 
         } 
      }
    </script>
       ……………………
        <input type="button" value="DoFlexFunction" onClick="test()"/>           <noscript>
            <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="index">
                <param name="movie" value="index.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="allowFullScreen" value="true" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="index.swf" width="100%" height="100%">
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="allowScriptAccess" value="sameDomain" />
                    <param name="allowFullScreen" value="true" />
                <embed src="index.swf" quality="high" bgcolor="#ffffff"⑤
                width="400" height="230" name="index" align="middle"
                play="true"
                loop="false"
                quality="high"
                allowScriptAccess="sameDomain"
                type="application/x-shockwave-flash"
                pluginspage="http://www.adobe.com/go/getflashplayer">
            </embed>
            </object>
        </noscript>        
   </body>

①       ExternalInterface是flash ActionScrtip提供的外部访问接口,所以首先需要导入包 (import flash.external.ExternalInterface;);

②      将 ActionScript 方法注册为可从容器里调用,成功调用 addCallBack() 后    (ExternalInterface.addCallback("用于Js调用的函数名",As中的函数名)),容器中的  JavaScript代码可以调用在 Flash Player 中注册的函数;

③      AS调用的加载方法;

④      此代码依赖 object 标签的 id 属性和 embed 标签的 name 属性以获得注册函数  的响应。由于 Internet Explorer 和 Netscape 以不同方式引用 movie 对象,所以函数 thisMovie 根据浏览器返回相应的语法。除非服务器上承载 HTML 页,否则浏览器可能会出现安全警告。(注意:请避免使用其它访问插件对象的方法,例document.getElementById("pluginName") 或 document.all.pluginName,因为这些其它方法不能在所有浏览器中一致地工作。js中可以用document.getElementById("Flas在Html中的ID").注册时设置的函数名(参数)进行调用)

⑤      在HTML中我用<embed></embed>引用了SWF

posted @ 2012-05-28 17:15  水石.重阳  阅读(6116)  评论(0编辑  收藏  举报