Flex通过javascript读写cookie

来源:互联网 发布:二叉树的遍历设计算法 编辑:程序博客网 时间:2024/05/21 13:21

做登录等类的身份验证功能,传统的WEB开发基本上都要使用session或是cookit。然而在Flex中并没有提供直接操作cookit或是 session的方法。经过查资料发现,Flex提供了SharedObject这个本地对象。有人把它称为“Flash Cookie ”。

SharedObject提供了下面的操作本地对象的方法: 
SharedObject.clear() 删除本地共享对象; 
SharedObject.flush() 立即把共享对象数据写入本地文件; 
SharedObject.getLocal() 创建或连接本地共享对象; 
SharedObject.getSize() 取得本地共享对象的指定大小数据。 

举个应用的小例子: 

保存值: 
var test:SharedObject = SharedObject.getLocal( "test" );// 创建一个本地保存数据的对象
test.data.user = "username"; 
test.data.psw = "password"; 
test.flush(); //提交保存 

取值: 
var test: SharedObject = SharedObject.getLocal("test"); 
Alert.show(test.data.user); 
Alert.show(test.data.psw); 

注意如果使用alert,要引入 import mx.controls.Alert类


开发web项目的时候,可能flex只用来实现项目的部分模块。当flex需要在客户端写入/读取一些状态信息的时候,我们会想到用cookie。flex是不支持cookie的,只有SharedObject这个本地对象。所以解决的办法就有两个:

  1. flex通过调用js来实现对cookie的操作;
  2. js通过flex实现对SharedObject的操作;

这两种方法的基础就是实现flex和javascript的交互,自己试着写了个小例子,实现了第一种方法,直接上代码:

 

Flex_Js_Cookie.js:

 

[javascript] view plaincopyprint?
  1. function SetCookie(name,value)  
  2. {  
  3.     document.cookie = name+"="+escape(value);  
  4. };  
  5. function GetCookie(name)  
  6. {  
  7.     var arr = document.cookie.match(new RegExp("(^|)"+name+"=([^;]*)(;|$)"));  
  8.     alert(arr.length);  
  9.     if(arr != null)  
  10.     {  
  11.         return unescape(arr[2]);  
  12.     }  
  13. }  

 

Flex_Js_Cookie.html:

[xhtml] view plaincopyprint?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <head>  
  5. <title></title>  
  6. <script src="swfobject.js" type="text/javascript"></script>  
  7. <script src="Flex_Js_Cookie.js" type="text/javascript"></script>  
  8. <script language=javascript>  
  9. var flashvars = {};  
  10.         var params = {  
  11.             menu: "false",  
  12.             scale: "noScale",  
  13.             allowFullscreen: "true",  
  14.             allowScriptAccess: "always",  
  15.             bgcolor: "#FFFFFF"  
  16.         };  
  17.         var attributes = {id:"swfplayer"};  
  18.         swfobject.embedSWF("Flex_Js_Cookie.swf", "swfplayer", "500", "350", "9.0.0", "expressInstall.swf", flashvars, params, attributes);  
  19. </script>  
  20. </head>  
  21. <body>  
  22. <div id="swfplayer"></div>  
  23. </body>  
  24. </html>  

 

Flex_Js_Cookie.mxml:

[xhtml] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.     <mx:Script>  
  4.         <![CDATA[ 
  5.             import flash.external.*; 
  6.             import mx.controls.Alert; 
  7.              
  8.             public function GetCookie():void 
  9.             { 
  10.                 var jsFunction:String = "GetCookie"; 
  11.                 var key:String = txt_key.text; 
  12.                 if(ExternalInterface.available) 
  13.                 { 
  14.                     var value:String = ExternalInterface.call(jsFunction,key); 
  15.                     txt_value.text = value; 
  16.                 } 
  17.             } 
  18.              
  19.             public function SetCookie():void 
  20.             { 
  21.                 var jsFunction:String = "SetCookie"; 
  22.                 var key:String = txt_key_set.text; 
  23.                 var value:String = txt_value_set.text; 
  24.                 if(ExternalInterface.available) 
  25.                 { 
  26.                     ExternalInterface.call(jsFunction,key,value); 
  27.                 } 
  28.             } 
  29.         ]]>  
  30.     </mx:Script>  
  31.     <mx:Label x="51" y="39" text="cookie名:" fontSize="12"/>  
  32.     <mx:Label x="51" y="86" text="cookie值:" fontSize="12"/>  
  33.     <mx:TextInput x="122" y="39" id="txt_key"/>  
  34.     <mx:Button x="301" y="84" label="确定" fontSize="12" click="GetCookie()"/>  
  35.     <mx:TextInput x="122" y="86" id="txt_value" enabled="false"/>  
  36.     <mx:Label x="51" y="183" text="cookie名:" fontSize="12"/>  
  37.     <mx:Label x="51" y="226" text="cookie值:" fontSize="12"/>  
  38.     <mx:TextInput x="122" y="183" id="txt_key_set"/>  
  39.     <mx:TextInput x="122" y="226" id="txt_value_set"/>  
  40.     <mx:Button x="301" y="226" label="确定" fontSize="12" click="SetCookie()"/>  
  41.     <mx:Label x="51" y="155" text="设置cookie" fontSize="12" color="#C42A2A"/>  
  42.     <mx:Label x="51" y="11" text="取得cookie" fontSize="12" color="#C42A2A"/>  
  43.       
  44. </mx:Application>  

 

通过代码,会发现在html文件里面使用了swfobject.js这个文件,这是一个第三方发布的工具包,方便我们在页面中使用flash,下载地址是:http://code.google.com/p/swfobject/downloads/list。只要里面的js文件。

mxml文件要预先编译成swf文件。然后一起部署到tomcat下就可以运行了。

 

运行效果如图:




0 0
原创粉丝点击