`
roger_588
  • 浏览: 68609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex与浏览器交互

阅读更多

在用flex做Web应用时为了扩展应用程序功能,势必会更多的同浏览器进行交互,这样就会用到下面介绍的知识
1、在Flex中实现URL 跳转(使用flash.net.navigateToURL()方法如:)
   view plaincopy to clipboardprint?
/* 
     * param1: 要跳转的URL 
     * param2: 跳转方式 _blank /_self 
     */ 
    navigateToURL(new URLRequest("http://blog.csdn.net/xingjunli"),"_blank"); 
/*
     * param1: 要跳转的URL
     * param2: 跳转方式 _blank /_self
     */
    navigateToURL(new URLRequest("http://blog.csdn.net/xingjunli"),"_blank");


2、使用FlashVars传替换参数(使用Application.application.parameters属性)
    页面嵌入SWF文件代码(我们可以通过JS动态来设置FlashVars信息已达到数据交互的目的)
              view plaincopy to clipboardprint?
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="mySwf">  
                <param name="movie" value="main.swf" />  
                <param name="quality" value="high" />  
                <param name="bgcolor" value="#869ca7" />  
                <param name="allowScriptAccess" value="sameDomain" />  
        <param name="FlashVars" value="UserName=Andy_liu&Age=18&Address=HongKong" />  
            </object> 
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="mySwf">
                <param name="movie" value="main.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#869ca7" />
                <param name="allowScriptAccess" value="sameDomain" />
        <param name="FlashVars" value="UserName=Andy_liu&Age=18&Address=HongKong" />
            </object>
        Flex中获取参数代码:
           view plaincopy to clipboardprint?
private function onFlashVars(e:MouseEvent):void //获取页面参数  
        {  
            var parameters:Object = Application.application.parameters;  
            labURL.text = Application.application.url.toString();            // http://localhost:8889/main.swf  
            var param1:String = parameters.UserName;                    // Andy_liu  
            var param2:int = parseInt(parameters.Age);                    // 18  
            var param3:String = parameters.Address;                    // HongKong  
            /* 
            txtParam1.text = param1; 
            txtParam2.text = String(param2); 
            txtParam3.text = param3; 
            */ 
             
        } 
private function onFlashVars(e:MouseEvent):void //获取页面参数
        {
            var parameters:Object = Application.application.parameters;
            labURL.text = Application.application.url.toString();            // http://localhost:8889/main.swf
            var param1:String = parameters.UserName;                    // Andy_liu
            var param2:int = parseInt(parameters.Age);                    // 18
            var param3:String = parameters.Address;                    // HongKong
            /*
            txtParam1.text = param1;
            txtParam2.text = String(param2);
            txtParam3.text = param3;
            */
          
        }


3、在Flex中调用JavaScript函数
    先在页面中完成js function(注在Flex中只能调用当前页面引入的JS函数)
   view plaincopy to clipboardprint?
function ShowUserInfo(name,age,address)  
     {  
        alert("Name:" + name+"\n" + "Age:" + age + "\n" +"Address"+address);  
        return "Call Successful!" 
     } 
function ShowUserInfo(name,age,address)
     {
        alert("Name:" + name+"\n" + "Age:" + age + "\n" +"Address"+address);
        return "Call Successful!"
     }
     Flex中调用方法并获取JS function返回值( 使用ExternalInterface.call()方法):
    view plaincopy to clipboardprint?
private function onCallJS(e:MouseEvent):void 
    {  
        /* 
         * param1:当前页JS function 方法名 
         * param...传递的参数0-N个 
         */ 
        var resultValue:String = ExternalInterface.call("ShowUserInfo",txtParam1.text,txtParam2.text,txtParam3.text);  
        //resultValue = Call Successful!  
    } 
private function onCallJS(e:MouseEvent):void
    {
        /*
         * param1:当前页JS function 方法名
         * param...传递的参数0-N个
         */
        var resultValue:String = ExternalInterface.call("ShowUserInfo",txtParam1.text,txtParam2.text,txtParam3.text);
        //resultValue = Call Successful!
    }


4、在JavaScript中调用ActionScript函数
    页面中调用的JS 函数
   view plaincopy to clipboardprint?
function CallFlexMethod()  
     {  
        var swf="mySwf";  
        var container;  
        //alert(navigator.appName);  
        if(navigator.appName.indexOf("Microsoft")>=0)  
        {  
            container = document;  
        }  
        else 
        {  
            container = window;  
        }  
        container[swf].flexFunction1();                    //无参方法  
        container[swf].flexFunction2("myHtmlRequest!");//参数传递方法  
        alert(container[swf].flexFunction3());            //含返回值方法  
     } 
function CallFlexMethod()
     {
        var swf="mySwf";
        var container;
        //alert(navigator.appName);
        if(navigator.appName.indexOf("Microsoft")>=0)
        {
            container = document;
        }
        else
        {
            container = window;
        }
        container[swf].flexFunction1();                    //无参方法
        container[swf].flexFunction2("myHtmlRequest!");//参数传递方法
        alert(container[swf].flexFunction3());            //含返回值方法
     }

     Flex中注册和调用执行的方法:
     view plaincopy to clipboardprint?
//重要必须在Flex中执行如下注册 才能在JS中调用  
    private function registerCallBacks():void 
    {  
        ExternalInterface.addCallback("flexFunction1",jsCallBack1);  
        ExternalInterface.addCallback("flexFunction2",jsCallBack2);  
        ExternalInterface.addCallback("flexFunction3",jsCallBack3);  
    }  
    private function jsCallBack1():void 
    {  
        Alert.show("Call First Flex Method!");  
    }  
    private function jsCallBack2(params:*):void 
    {  
        Alert.show("Call Method2:" + String(params));  
    }  
    private function jsCallBack3():String  
    {  
        return Math.random().toString();     
    } 
//重要必须在Flex中执行如下注册 才能在JS中调用
    private function registerCallBacks():void
    {
        ExternalInterface.addCallback("flexFunction1",jsCallBack1);
        ExternalInterface.addCallback("flexFunction2",jsCallBack2);
        ExternalInterface.addCallback("flexFunction3",jsCallBack3);
    }
    private function jsCallBack1():void
    {
        Alert.show("Call First Flex Method!");
    }
    private function jsCallBack2(params:*):void
    {
        Alert.show("Call Method2:" + String(params));
    }
    private function jsCallBack3():String
    {
        return Math.random().toString();  
    }


5、BrowserManager管理组件应用
     BrowserManager 是一个 Singleton 管理器,用于充当浏览器和应用程序之间的代理。使用它可以访问浏览器地址栏中的 URL,这与访问 JavaScript 中的 document.location 属性类似。当 url 属性发生更改时调度这些事件。然后侦听器可以响应、更改该 URL 或阻止其它对象获取此事件。
      获得bm实例:
    view plaincopy to clipboardprint?
private var bm:IBrowserManager = BrowserManager.getInstance(); 
  private var bm:IBrowserManager = BrowserManager.getInstance();
      a、获取URL传递的参数:
   view plaincopy to clipboardprint?
private function getBrowserValue():void 
    {  
        //URL = "http://localhost/browser/main.html#name=peter;age=25;address=shenzhen china"  
        var o:Object = URLUtil.stringToObject(bm.fragment);  
        txtURLName.text = o.name;            // peter  
        txtURLAge.text = o.age;                // 25  
        txtURLAddress.text = o.address;        // shenzhen china  
    } 
private function getBrowserValue():void
    {
        //URL = "http://localhost/browser/main.html#name=peter;age=25;address=shenzhen china"
        var o:Object = URLUtil.stringToObject(bm.fragment);
        txtURLName.text = o.name;            // peter
        txtURLAge.text = o.age;                // 25
        txtURLAddress.text = o.address;        // shenzhen china
    }


    b、获取浏览器信息(请求URL:“http://localhost:8889/main.html#name=peter;age=25;address=shenzhen%20china”)
       view plaincopy to clipboardprint?
private function onBrowserManager(e:MouseEvent):void 
        {  
            txtBMOutPut.text += "Full URL: \n" + bm.url + "\n\n";  
            txtBMOutPut.text += "Base URL: \n" + bm.base + "\n\n";  
            txtBMOutPut.text += "URL Fragment URL: \n" + bm.fragment + "\n-----------\n";  
             
            var o:Object = URLUtil.stringToObject(bm.fragment);  
            txtBMOutPut.text += "Object: \n" + ObjectUtil.toString(o) + "\n\n";  
            txtBMOutPut.text += "Name: \n" + o.name + "\n\n";  
            txtBMOutPut.text += "Age: \n" + o.age + "\n\n";  
            txtBMOutPut.text += "Address: \n" + o.address + "\n-----------\n";  
             
            txtBMOutPut.text += "URL Port: \n" + URLUtil.getPort(bm.url) + "\n\n";  
            txtBMOutPut.text += "URL Protocol: \n" + URLUtil.getProtocol(bm.url) + "\n\n";  
            txtBMOutPut.text += "URL Server: \n" + URLUtil.getServerName(bm.url) + "\n\n";  
            txtBMOutPut.text += "URL Server with Port: \n" + URLUtil.getServerNameWithPort(bm.url) + "\n-----------\n";  
            /* 执行结果: 
            Full URL: 
            http://localhost:8889/main.html#name=peter;age=25;address=shenzhen%20china 
            Base URL: 
            http://localhost:8889/main.html 
            URL Fragment URL: 
            name=peter;age=25;address=shenzhen%20china 
            ----------- 
            Object: 
            (Object)#0 
              address = "shenzhen china" 
              age = 25 
              name = "peter" 
            Name: 
            peter 
            Age: 
            25 
            Address: 
            shenzhen china 
            ----------- 
            URL Port: 
            8889 
            URL Protocol: 
            http 
            URL Server: 
            localhost 
            URL Server with Port: 
            localhost:8889 
            ----------- 
            */ 
        } 
private function onBrowserManager(e:MouseEvent):void
        {
            txtBMOutPut.text += "Full URL: \n" + bm.url + "\n\n";
            txtBMOutPut.text += "Base URL: \n" + bm.base + "\n\n";
            txtBMOutPut.text += "URL Fragment URL: \n" + bm.fragment + "\n-----------\n";
          
            var o:Object = URLUtil.stringToObject(bm.fragment);
            txtBMOutPut.text += "Object: \n" + ObjectUtil.toString(o) + "\n\n";
            txtBMOutPut.text += "Name: \n" + o.name + "\n\n";
            txtBMOutPut.text += "Age: \n" + o.age + "\n\n";
            txtBMOutPut.text += "Address: \n" + o.address + "\n-----------\n";
          
            txtBMOutPut.text += "URL Port: \n" + URLUtil.getPort(bm.url) + "\n\n";
            txtBMOutPut.text += "URL Protocol: \n" + URLUtil.getProtocol(bm.url) + "\n\n";
            txtBMOutPut.text += "URL Server: \n" + URLUtil.getServerName(bm.url) + "\n\n";
            txtBMOutPut.text += "URL Server with Port: \n" + URLUtil.getServerNameWithPort(bm.url) + "\n-----------\n";
            /* 执行结果:
            Full URL:
            http://localhost:8889/main.html#name=peter;age=25;address=shenzhen%20china
            Base URL:
            http://localhost:8889/main.html
            URL Fragment URL:
            name=peter;age=25;address=shenzhen%20china
            -----------
            Object:
            (Object)#0
              address = "shenzhen china"
              age = 25
              name = "peter"
            Name:
            peter
            Age:
            25
            Address:
            shenzhen china
            -----------
            URL Port:
            8889
            URL Protocol:
            http
            URL Server:
            localhost
            URL Server with Port:
            localhost:8889
            -----------
            */
        }


        c、BrowserManager还包含其它一些浏览器的扩展方法如:bm.setTitle("新标题:正在培训!")修改页面标题等...参考http://livedocs.adobe.com/flex/3/html/help.html?content=deep_linking_3.html


6、在Flex中通过实现mx.managers.IHistoryManagerClinet接口来实现自定义历史记录管理器
 自定义textInput
 view plaincopy to clipboardprint?
<?xml version="1.0" encoding="utf-8"?>  
<mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml" text="Change Me!" implements="mx.managers.IHistoryManagerClient" 
  creationComplete="mx.managers.HistoryManager.register(this);" change="textChanged(event)">  
    <mx:Script>  
        <!--[CDATA[  
            import mx.managers.HistoryManager;  
            private function textChanged(e:Event):void 
            {  
                HistoryManager.save();  
            }  
            public function saveState():Object  
            {  
                return {text:text};  
            }  
            public function loadState(state:Object):void 
            {  
                var newState:String = state?state.text:"";  
                if(newState != text)  
                {  
                    text = unescape(newState);  
                }  
            }  
        ]]-->  
    </mx:Script>  
</mx:TextInput> 
<?xml version="1.0" encoding="utf-8"?>
<mx:TextInput xmlns:mx="http://www.adobe.com/2006/mxml" text="Change Me!" implements="mx.managers.IHistoryManagerClient"
  creationComplete="mx.managers.HistoryManager.register(this);" change="textChanged(event)">
    <mx:Script>
        <!--[CDATA[
            import mx.managers.HistoryManager;
            private function textChanged(e:Event):void
            {
                HistoryManager.save();
            }
            public function saveState():Object
            {
                return {text:text};
            }
            public function loadState(state:Object):void
            {
                var newState:String = state?state.text:"";
                if(newState != text)
                {
                    text = unescape(newState);
                }
            }
        ]]-->
    </mx:Script>
</mx:TextInput>
 当我们在使用上面自定义的TextInput时会发现在浏览器URL中会动态创建修入如这样的一些信息“#app=a4e4&8211-text=asdfasdfasdfsd%20”故FLEX通过浏览器URL记录SWF文件中组件的变化已实现保存历史记录数据已实现历史记录管理!

分享到:
评论

相关推荐

    flex解析浏览器地址

    与浏览器的通信能够让 你建立一个可以超越Flex 应用本身的应用程序。你可以连接到已有的地址,通过JavaScript 和其他应用程序通信,并且可以和浏览器的历史记录交互,作为开始。ExternalInterface 类 让你能够调用...

    Flex与后台交互的方法

    Flex与后台交互的方法 是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的 Web 应用程序的高效率的开放源码

    Flex数据传输与交互

    Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web 应用程序,这些应用程序利用 Adobe Flash Player和 Adobe AIR, 运行时跨浏览器、桌面和操作系统实现一致的部署。虽然只能使用 Flex 框架构建 Flex ...

    Java和Flex交互常见问题及解决

    这是几个常见的问题: 1.安全域问题,3.粘包问题 4.中文问题。

    Flex_4.0_RIA开发详解

    它使企业能够创建个性化的丰富多媒体应用程序,极大地提高用户的体验,彻底革新人与 Web 的交互关系。 1.增强用户体验 2.完善的开发环境 3.通用的配置环境 4.企业级的特征 5.消除页面加载 6.标准的架构 7.与...

    FLEX的一些学习资料

    Flex的一些学习习资料,有点...虽然只能使用 Flex 框架构建 Flex 应用程序,但Adobe Flash Builder™(之前称为 Adobe Flex Builder™)软件可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。

    [Flex.3程序设计].(美)布朗.扫描版

    虽然只能使用 Flex 框架构建 Flex应用程序,但Adobe Flash Builder™(之前称为 Adobe Flex Builder™)软件可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。 使用 Flex 创建的 RIA 可...

    基于Flex4.X+BlazeDS+Spring3+JPA+Hibernate+MySQL实战开发在线书店

    Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 运行时跨浏览器、桌面和操作系统实现一致的部署。虽然只能使用 Flex 框架构建 Flex应用...

    flex android 移动开发

    手机应用程序中用户与文本的交互 在手机应用程序中支持屏幕键盘 在手机应用程序中嵌入字体 在手机控件中使用 HTML 文本 第 6 章: 外观设计 手机外观设计的基础知识 为手机应用程序创建外观 应用自定义手机外观 ........

    FLEX从入门到精通

    Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器、桌面和操作系统。虽然只能使用 Flex 框架构建 Flex应用程序,但Adobe ...

    flexdashboard:简易的R交互式仪表板

    flexdashboard:用于R的简单交互式仪表板 使用可以将一组相关的数据可视化发布为仪表板。 支持多种组件,包括 ; 基本,晶格和网格图形; 表格数据量规和值箱; 和文字注释。 灵活且易于指定基于行和列的。 可以智能...

    使用 Flex 和 Flash Builder 开发手机应用程序

    手机应用程序中用户与文本的交互 在手机应用程序中支持屏幕键盘 在手机应用程序中嵌入字体 在手机控件中使用 HTML 文本 第 6 章: 外观设计 手机外观设计的基础知识 为手机应用程序创建外观 应用自定义手机外观 ...

    flex3的cookbook书籍完整版dpf(包含目录)

    第二十章与浏览器通信(628) 20.1节连接到外部URL 20.2节使用FlashVars 20.3节在Flex里面调用JavaScript函数方法 20.4节在JavaScript中调用ActionScript方法函数 20.5节经由BrowserManager改变HTML页面标题 20.6节...

    tailwind-flex

    npm test 在交互式监视模式下启动测试运行器。 有关更多信息,请参见关于运行测试的部分。 npm run build 构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被...

    FlexLayout-bp3-demo:FlexLayout-bp3演示基于BluePrintJS的应用程序布局

    打开在浏览器中查看。 如果进行编辑,页面将重新加载。 您还将在控制台中看到任何棉绒错误。 yarn test 在交互式监视模式下启动测试运行程序。 有关更多信息,请参见关于的部分。 yarn build 构建生产到应用程序...

    flex-gap-polyfill-next-js

    用浏览器打开以查看结果。 您可以通过修改pages/index.js来开始编辑页面。 页面在您编辑文件时自动更新。 可以在上访问。 可以在pages/api/hello.js编辑此端点。 pages/api目录映射到/api/* 。 此目录中的文件被...

    P13_Blazor项目模板讲解ThreeBlazor2020_1_11.rar

    Blazor与Flex和silverlight有点像,Flex和silverlight有一些大厂反对,不支持flex和silverlight Blazor使用Web Assembly标准,Web Assembly是一种业界标准,所有浏览器都支持它,类似于Java字节码,各种语言都可以...

    flex

    打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。yarn test 在交互式监视模式下启动测试运行器。 有关更多信息,请参见关于的部分。yarn build 构建生产到应用程序...

    nextjs-demo-flexor

    用浏览器打开以查看结果。 您可以通过修改pages/index.js来开始编辑页面。 页面在您编辑文件时自动更新。 可以在上访问。 可以在pages/api/hello.js编辑此端点。 pages/api目录映射到/api/* 。 此目录中的文件被...

    Ajax技术课件,保密资料下载

    作用:增强用户的交互体验 同步操作 :在jsp/servlet中 发送了一个同步的request 这时用户必须等待响应. 特点:返回一个整张页面 异步操作 : 发送了一个异步的request 这时用户不用等待 ,可以进行后续...

Global site tag (gtag.js) - Google Analytics