zoukankan      html  css  js  c++  java
  • JS 与Flex交互:html中的js 与flex中的actionScript通信

    Flex与JavaScript交互的问题,这里和大家分享一下,主要包括Flex调用JavaScript中的函数和JavaScript调用Flex中的函数两大部分内容。

    Flex 与JavaScript 交互,主要依靠Flex的ExternalInterface,其提供了addCallBack和call方法。

    一.Html页面嵌套Flex

    html嵌套Flex需要用到swfobject.js,下载网址http://code.google.com/p/swfobject/

    swfobject.embedSWF(swfUrl, id, width, height, version, expressInstallSwfurl, flashvars, params, attributes)为js加载flex的方法。

    详细请看:http://blog.csdn.net/allen_oscar/article/details/9744265

    如下:

    <!DOCTYPE HTML PUBLICd "-//W3C//DTD HTML 4.000%1 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html >
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>JS与Flex交互</title>    
           
             <script type="text/javascript" src="lib/interaction.js"></script>
            <script type="text/javascript" src="lib/swfobject.js"></script>
            
            
              <script>
              	
                var jsApp;
              	
      	   function init(name){
       
                 this.name = name;//name="flexDiv" flexDiv为 html页面中 <div id="flexDiv">/div><  的id
                 var flashvars = {};
                 var params = {};
                 attributes = {};
                 params.allowScriptAccess = "always";//安全沙箱
                 params.scale = "nocale";   
         swfobject.embedSWF("http://192.168.1.102:8088/FlexApp/FlexApp.swf", name,"100%","100%", "10.2.0", "", flashvars, params, attributes);  
        		  	 
    		    }
    		           
              	
              	           	
              	</script>
        </head>
       <body  onload="init("flexDiv")"  width="100%" height="100%">
             <div>     <label> Flex说:</label> <input id="flexSay" /> <input  id="jsinput" value="你好Flex" /> <button >Send</button>  </div>    
               <table width="100%" height="100%">
    		        <td>	<div id="flexDiv" width="100%" height="100%" style="display:block">
    	        		               <a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a>				   
    				    </div>	
    				</td>		  
    	        </table>
        </body>  
        
    </html>
    

    二.JavaScript与Flex交互
     

    Flex 与JavaScript 交互,主要依靠Flex的ExternalInterface,其提供了addCallBack和call方法。

    ExternalInterface.addCallback("onHello",onHelloFlex);//onHello 为javascript中的方法
    ExternalInterface.call("flexCall",flex.text);//调用javascript中的flexCall()方法

    ExternalInterface还提供了一些其他的方法:

    ExternalInterface.available//对浏览器支持的检查
    Security.allowDomain("*"); //允许调用SWF文件中的属性和变量
    Security.allowInsecureDomain("*"); 

    三.代码示例

    JSApp.html

    <!DOCTYPE HTML PUBLICd "-//W3C//DTD HTML 4.000%1 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html >
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>地图接口</title>    
           
             <script type="text/javascript" src="lib/interaction.js"></script>
            <script type="text/javascript" src="lib/swfobject.js"></script>
            
            
              <script>
              	
              	var jsApp;
              	
      	        function init(){
    			          
    		          jsApp = new LoadFlex("flexDiv");//创建对象 
    						  	 
    		    }
    		           
              	
              	function sendJS(){
              		 
              	  try{
              	  	 
          		 	     var str =  document.getElementById('jsinput').value;
          		 	     
          		 		 jsApp.jsToFlex(str);
              		    
                      } catch(e){	
              		  alert(e.message);
              		  }
              	
              	}
              	
              	
              	</script>
        </head>
       <body  onload="init()"  width="100%" height="100%">
             <div>     <label> Flex说:</label> <input id="flexSay" /> <input  id="jsinput" value="你好Flex" /> <button onClick="sendJS()">Send</button>  </div>    
               <table width="100%" height="100%">
    		        <td>	<div id="flexDiv" width="100%" height="100%" style="display:block">
    	        		               <a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a>				   
    				    </div>	
    				</td>		  
    	        </table>
        </body>  
        
    </html>
    

    interaction.js

    	 function LoadFlex(name){
    	 	
    		this.name = name;
            var flashvars = {};
    	    var params = {};
    	    attributes = {};
    	    params.allowScriptAccess = "always";
    	    params.scale = "nocale";   
    	 	swfobject.embedSWF("http://192.168.1.102:8088/FlexApp/FlexApp.swf", name,"100%","100%", "10.2.0", "", flashvars, params, attributes);	 
    			 
    		this.GetFlex = function(){
    			
    			var mapName = this.name;
    			if (navigator.appName.indexOf("Microsoft") != -1) {
    				return window[mapName];
    			}else {
    		     	return document[mapName];			
    			}
    		 
    		}
     
    	    this.jsToFlex  = function(str){
    			 try{
    			  
    			 var str = this.GetFlex().onHello(str); 
    			
    			 } catch(e){
    			  	alert(e.message);
    			 
    		  }     
    		}
    		  
          }
          
          function flexCall(str){
          	
            // alert(str);
          	document.getElementById("flexSay").value =str
          }
    		                                             
    

    FlexApp.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    			   xmlns:s="library://ns.adobe.com/flex/spark"  
    			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
    			   applicationComplete="init()" creationComplete="oninit()" initialize="oninit()"
                  viewSourceURL="srcview/index.html">
    	<fx:Script>
    		<![CDATA[
    	
    			import flash.external.ExternalInterface;
    			import flash.system.Security;
    			
    			import mx.controls.Alert;
    			import mx.events.FlexEvent; 
                public function oninit():void{
    			
    				
    			}
    			
    			public function init():void{
    			
    				Security.allowDomain("*"); //允许调用SWF文件中的属性和变量
    				Security.allowInsecureDomain("*"); 
    				
    				if (ExternalInterface.available)
    				{
    					try{
    						 
    						ExternalInterface.addCallback("onHello",onHelloFlex);//onHello 为javascript中的this.GetFlex().onHello(str); 
    
    						
    					}
    					catch(error:Error){
    						
    						Alert.show(error.message);
    					}
    					
    				} 
    			}
    			 
    	     	public	function onHelloFlex(str:String):String{
    				 
    				js.text = str;
    	 
    		        return "你好javaScript";
    			}
    			
    			public function onFlexToJS(ste:String):void{
    			
    				ExternalInterface.call("flexCall",flex.text);//调用javascript中的flexCall()方法
    			
    			} 
    		]]>
    	</fx:Script>
    	
    	
    	<fx:Declarations>
    		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
    	</fx:Declarations>
    	
    	<mx:VBox width="100%" height="100%" horizontalAlign="left" verticalAlign="middle" backgroundColor="#EAE3E3">
    		<s:Panel width="100%" height="500" chromeColor="#1E1E1E" title="javascript   and   flex 交互" color="#FCF9F9" fontWeight="bold" fontSize="14">
    			<mx:VBox height="100%" width="100%">
    				<mx:HBox height="100%">
    					   <mx:HBox width="270" height="200" paddingTop="10">
    						<s:Label color="#080808">javaScript说:</s:Label>   <s:TextInput   id="js" color="#020202"/> 
    					   </mx:HBox>
    					   <mx:HBox width="380" height="200" paddingTop="10">
    						   <s:Label color="#060606">Flex说:</s:Label>	<s:TextInput  text="你好javaScript"  id="flex" color="#020202"/>
    							<mx:Button click="onFlexToJS('hell')"    label="send"/>
    					   </mx:HBox>
    				</mx:HBox>
    			</mx:VBox>		
    		</s:Panel>	
    	</mx:VBox>
     
    </mx:Application>
    

    四:图片示例

    1.初始化页面

    2.点击html页面Send,通过调用this.GetFlex().onHello(str);方法-----》ExternalInterface.addCallback("onHello",onHelloFlex)---》public function onHelloFlex(str:String):String。

     

    3.点击flex页面Send,public function onFlexToJS(ste:String):void--》ExternalInterface.call("flexCall",flex.text)--》function flexCall(str)。




  • 相关阅读:
    Linux 常用命令总结(二)
    Linux(CentOS7)使用 RPM 安装 mysql 8.0.11
    Linux(CentOS7) 相关软件安装
    8、js——字符串
    7、js——数组
    6、js——创建对象方式
    5、js——this说明
    4、js——函数
    4、js——对象
    2、js编写位置
  • 原文地址:https://www.cnblogs.com/pangblog/p/3241634.html
Copyright © 2011-2022 走看看