Flex 如何限制客户端只运行一个application实例

用flex做web应用,就必须处理web应用的一个常见问题,即在同一台电脑上用不同账号登陆web应用,由于火狐了、ie7以上版本等浏览器sessionid是同一个,因此会发生a、b用户共享同一session信息进行业务操作,从而导致业务紊乱。

       幸运的是,flex有localconnection可以实现同一application在同一客户机上只可有一个实例在运行。关于localconnection相关信息,大家可以参阅adobe的参考文档。我们只需关注application一个实例的localconnection send信息出来之后,application另外一个实例的localconnection connect可以接收到信息。因此,只要localconnection connect接收到信息,即可表明一定有已存在的application在运行,此时需要做退出application等相关处理。下述为demo。

<?xml version="1.0" encoding="utf-8"?>

<s: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"            creationComplete="init()">

    <s:layout>

       <s:BasicLayout/>

    </s:layout>

    <fx:Script>

       <![CDATA[

           import mx.controls.Alert;

           import mx.events.CloseEvent;

           private var conn:LocalConnection;

          

           private function init():void{

              sendLocalCon();

           }

          

           //if the app is first running

           private function sendLocalCon():void{

              try{

                  conn = new LocalConnection();

                  conn.addEventListener(StatusEvent.STATUS, onLocalConStatus);

                  conn.send("myConn","localConMethod");

              }catch(e:Error){}

           }

          

           public function localConMethod():void{}

          

           private function onLocalConStatus(event:StatusEvent):void {

              switch (event.level) {

                  case "status":

                     Alert.show("该应用已经在运行,请检查!","系统提示",4,null,closeApplication);

                     break;

                  case "error":

                     findApplications();

                     break;

              }

           }

          

           private function findApplications():void{

              conn = new LocalConnection();

              conn.client = this;

              try {

                  conn.connect("myConn");

              } catch (error:ArgumentError) {

                  Alert.show("该应用已经在运行,请检查!","系统提示",4,null,closeApplication);

              }

           }

          

//         private static const JS_CLOSEHTML:String="function closeWindowns(){" +

//            "window.opener=null;"+

//            "window.open('','_self');"+

//            "window.close();"+

//            "}";

          

           private function closeApplication(evt:CloseEvent):void{

//            ExternalInterface.call(JS_CLOSEHTML);

              //检查到应用二次运行时,程序该做的事情

           }

       ]]>

    </fx:Script>

    <fx:Declarations>

       <!-- 将非可视元素(例如服务、值对象)放在此处 -->

    </fx:Declarations>

    <s:Panel title="应用只运行一次示例" x="35" y="33" width="168"/>

</s:Application>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值