`

AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)

 
阅读更多

原文链接:AS:Flash AS3中获取浏览器信息及URL相关参数(并非swf url地址)

好久没来这里了,最近发现网络上对此类信息的封装少的可怜,没有一个是比较完整的,今天又是周未,不敲点代码手痒痒的,^_^,所以本人手贱借此时发布一篇是关于 AS3中获取浏览器信息及URL相关参数的WebUtils类,欢迎大家拍砖以使此类更丰富一些!

先来看看效果,因本机没装多个浏览器测试,所以只截了几个浏览器的获取的结果

IE:

360,内核是IE核心,所以效果跟IE基本一样

FF,即FireFox(火狐中国版)

 

以下是Test.as测试类:

package 
{ 
    import flash.events.*; 
    import flash.display.*; 
    import fl.controls.Button; 
    import com.VvxT.WebUtils; 
  
    public class Test extends MovieClip 
    { 
        public function Test() 
        { 
            txt0.appendText(WebUtils.BrowserAgent); 
  
            txt1.appendText("是否是IE:"+WebUtils.IsIE.toString()+ "\r\n"); 
            txt1.appendText("是否是FireFox:"+WebUtils.IsMozilla.toString()+ "\r\n"); 
            txt1.appendText("是否是Safari:"+WebUtils.IsSafari.toString()+ "\r\n"); 
            txt1.appendText("是否是Opera:"+WebUtils.IsOpera.toString()+ "\r\n"); 
            txt1.appendText("浏览器类型:"+WebUtils.BrowserMatch().browser+" 浏览器版本:"+WebUtils.BrowserMatch().version + "\r\n"); 
  
            txt2.appendText("获取URL地址:" +WebUtils.Url + "\r\n"); 
            txt2.appendText("获取所有URL参数:" + WebUtils.QueryString + "\r\n"); 
            txt2.appendText("获取URL参数id=:" + WebUtils.Request("id") + "\r\n"); 
            txt2.appendText("获取锚点参数:" + WebUtils.Hash + "\r\n"); 
            txt2.appendText("获取主机头:" + WebUtils.Host + "\r\n"); 
            txt2.appendText("获取访问协议:" + WebUtils.Protocol + "\r\n"); 
            txt2.appendText("获取访问端口:" + WebUtils.Port + "\r\n"); 
            txt2.appendText("获取页面名称路径:" + WebUtils.PathAndName + "\r\n"); 
            txt2.appendText("页面编码:" + WebUtils.PageEncoding + "\r\n"); 
  
            jsAlert.addEventListener(MouseEvent.CLICK,btnAlertClick); 
            jsOpen.addEventListener(MouseEvent.CLICK,btnOpenClick); 
            jsUrl.addEventListener(MouseEvent.CLICK,btnUrlClick); 
        } 
  
        private function btnAlertClick(evt:MouseEvent):void
        { 
            WebUtils.Alert('弹出JS对话框示例!'); 
        } 
  
        private function btnOpenClick(evt:MouseEvent):void
        { 
            WebUtils.Eval("javascript:window.open('http://www.baidu.com','newwindow')"); 
        } 
  
        private function btnUrlClick(evt:MouseEvent):void
        { 
            WebUtils.Redirect("Test.html?id="+Math.ceil(Math.random()*999999)+"&cid=ok&page="+Math.ceil(Math.random()*10)+"#end"); 
        } 
  
  
  
    } 
}

 

以下是WebUtils.as类(类包文件夹结构:com\VvxT\WebUtils.as):

package com.VvxT 
{ 
    import flash.net.*; 
    import flash.utils.ByteArray; 
    import flash.external.ExternalInterface; 
  
    /** 
     * 统一资源定位符 (Uniform Resource Locator, URL) 完整的URL由这几个部分构成: 
     * scheme://host:port/path?query#fragment 
     * PS:所有获取失败时返回null或"" 
     */
    public class WebUtils 
    { 
        private static var regWebkit:RegExp = new RegExp("(webkit)[ \\/]([\\w.]+)","i"); 
        /** 
         * 整个URl字符串 EX.:返回值:http://www.test.com:80/view.html?id=123#start 
         */
        public static function get Url():String
        { 
            return getUrlParams("url"); 
        } 
        /** 
         * 整个URl字符串 EX.:返回值:http://www.test.com:80/view.html?id=123#start 
         */
        public static function get Href():String
        { 
            return getUrlParams("href"); 
        } 
  
        /** 
         * 获取URL中的锚点(信息片断) EX.:返回值:#start 
         */
        public static function get Hash():String
        { 
            return getUrlParams("hash"); 
        } 
  
        /** 
         * URL 的端口部分。如果采用默认的80端口(PS:即使手动添加了:80),那么返回值并不是默认的80而是空字符。 
         */
        public static function get Port():String
        { 
            return (getUrlParams("port") ? getUrlParams("port") : "80"); 
        } 
  
        /** 
         * URL 的路径部分(就是文件地址) EX.:返回值:/view.html 
         */
        public static function get PathAndName():String
        { 
            return getUrlParams("PathAndName"); 
        } 
        /** 
         * URL 的路径部分(就是文件地址) EX.:返回值:/view.html 
         */
        public static function get Pathname():String
        { 
            return getUrlParams("pathname"); 
        } 
  
        /** 
         * 查询(参数)部分。除了给动态语言赋值以外的参数 EX.:返回值:?id=123 
         */
        public static function get Search():String
        { 
            return getUrlParams("search"); 
        } 
        /** 
         * 查询(参数)部分。除了给动态语言赋值以外的参数 EX.:返回值:?id=123 
         */
        public static function get QueryString():String
        { 
            return getUrlParams("query"); 
        } 
  
        /** 
         * URL 的协议部分 EX.:返回值:http:、https:、ftp:、maito:等 
         */
        public static function get Protocol():String
        { 
            return getUrlParams("protocol"); 
        } 
  
        /** 
         * URL 的主机部分,EX.:返回值:www.test.com 
         */
        public static function get Host():String
        { 
            return getUrlParams("host"); 
        } 
  
        public static function Request(param:String):String
        { 
            var returnValue:String; 
            try
            { 
                var query:String = QueryString.substr(1); 
                var urlv:URLVariables=new URLVariables(); 
                urlv.decode(query); 
                returnValue = urlv[param]; 
            } 
            catch (error:Object) 
            { 
            } 
            if (returnValue == null) 
            { 
                returnValue = ""; 
            } 
            return returnValue; 
        } 
  
        private static function getUrlParams(param:String):String
        { 
            var returnValue:String; 
            switch (param) 
            { 
                case "PathAndName" : 
                    returnValue = ExternalInterface.call("function getUrlParams(){return window.location.pathname;}"); 
                    break; 
                case "query" : 
                    returnValue = ExternalInterface.call("function getUrlParams(){return window.location.search;}"); 
                    break; 
                case "url" : 
                    returnValue = ExternalInterface.call("function getUrlParams(){return window.location.href;}"); 
                    break; 
                default : 
                    returnValue = ExternalInterface.call("function getUrlParams(){return window.location." + param + ";}"); 
                    break; 
            } 
  
            return (returnValue ? UrlDecode(returnValue):""); 
        } 
  
        /** 
         * 获取浏览器信息 
         */
        public static function get BrowserAgent():String
        { 
            var returnValue:String = ExternalInterface.call("function BrowserAgent(){return navigator.userAgent;}"); 
            return (returnValue ? returnValue:""); 
        } 
  
        /** 
         * 是否IE浏览器 
         */
        public static function get IsIE():Boolean
        { 
            return (BrowserMatch().browser.toLowerCase() == "msie"); 
        } 
  
        /** 
         * 是否FireFox浏览器 
         */
        public static function get IsMozilla():Boolean
        { 
            return (BrowserMatch().browser.toLowerCase() == "mozilla"); 
        } 
  
        /** 
         * 是否Safari浏览器 
         */
        public static function get IsSafari():Boolean
        { 
            return regWebkit.test(BrowserAgent); 
        } 
  
        /** 
         * 是否Opera浏览器 
         */
        public static function get IsOpera():Boolean
        { 
            return (BrowserMatch().browser.toLowerCase() == "opera"); 
        } 
  
        /** 
         * 获取浏览器类型及对应的版本信息 EX.:BrowserMatch().browser  BrowserMatch().version 
         */
        public static function BrowserMatch():Object
        { 
            var ua:String = BrowserAgent; 
            var ropera:RegExp = new RegExp("(opera)(?:.*version)?[ \\/]([\\w.]+)","i"); 
            var rmsie:RegExp = new RegExp("(msie) ([\\w.]+)","i"); 
            var rmozilla:RegExp = new RegExp("(mozilla)(?:.*? rv:([\\w.]+))?","i"); 
  
            var match:Object = regWebkit.exec(ua) || ropera.exec(ua) || rmsie.exec(ua) || ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || []; 
  
            return { browser: match[1] || "", version: match[2] || "0" }; 
        } 
  
        /** 
         * 获取页面编码方式,EX.:返回值:GB2312、UTF-8等; 
         */
        public static function get PageEncoding():String
        { 
            var returnValue:String = ExternalInterface.call("function PageEncoding(){return window.document.charset;}");//IE 
            if (returnValue == null) 
            { 
                returnValue = ExternalInterface.call("function PageEncoding(){return window.document.characterSet;}"); 
            }//FF 
            //获取成功 
            if (returnValue != null) 
            { 
                returnValue = returnValue.toUpperCase(); 
            } 
            return (returnValue ? returnValue:""); 
        } 
  
        /** 
         * 通过js弹出浏览器提示alert,EX.:Alert("Test"); 
         */
        public static function Alert(msg:String):void
        { 
            navigateToURL(new URLRequest("javascript:alert('"+msg+"');"), "_self"); 
        } 
  
        /** 
         * 通过js的open新窗口打开,(PS:多标签浏览器则新建一个标签打开) 
         */
        public static function Open(url:String):void
        { 
            Eval("javascript:window.open('"+url+"','newwindow')"); 
        } 
  
        /** 
        * URL重定向,使用replace函数,(PS:取消浏览器的前进后退,防止刷新回发数据) 
        */
        public static function Redirect(url:String):void
        { 
            Eval("window.location.replace('"+url + "')"); 
        } 
          
        /** 
        * URL重定向,使用内部navigateToURL函数,(PS:简化了不用每次都new URLRequest的操作) 
        */
        public static function NavigateToURL(url:String,target:String="_self"):void
        { 
            navigateToURL(new URLRequest(url), target); 
        } 
  
        /** 
        * 运行js语句,eval 
        */
        public static function Eval(code:String):Object
        { 
            var rtn:Object = ExternalInterface.call("eval",code + ";void(0);"); 
            return rtn; 
        } 
  
        /** 
        * URL编码,encoding为空时应用统一的UTF-8编码处理,可设"GB2312"、"UTF-8"等,(兼容性处理,对应JS中的escape) 
        */
        public static function UrlEncode(str:String,encoding:String = ""):String
        { 
            if (str == null || str == "") 
            { 
                return ""; 
            } 
            if (encoding == null || encoding == "") 
            { 
                return encodeURI(str); 
            } 
            var returnValue:String = ""; 
            var byte:ByteArray =new ByteArray(); 
            byte.writeMultiByte(str,encoding); 
            for (var i:int; i<byte.length; i++) 
            { 
                returnValue +=  escape(String.fromCharCode(byte[i])); 
            } 
            return returnValue; 
        } 
  
        /** 
        * URL解码,encoding为空时应用统一的UTF-8编码处理,可设"GB2312"、"UTF-8"等,(兼容性处理,对应JS中的unescape) 
        */
        public static function UrlDecode(str:String,encoding:String = ""):String
        { 
            if (str == null || str == "") 
            { 
                return ""; 
            } 
            if (encoding == null || encoding == "") 
            { 
                return decodeURI(str); 
            } 
            var returnValue:String = ""; 
            var byte:ByteArray =new ByteArray(); 
            byte.writeMultiByte(str,encoding); 
            for (var i:int; i<byte.length; i++) 
            { 
                returnValue +=  unescape(String.fromCharCode(byte[i])); 
            } 
            return returnValue; 
        } 
  
  
    } 
}

 

以下是所有文件的打包,方便读者测试:

http://files.cnblogs.com/VvxT/WebUtils.rar

 PS:以上均为原创,欢迎讨论拍砖! 

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 

汗,研究了一会,没有看到有Flash或AS3类的分类,不知发布到哪里了,随便选了一个Flex,哈哈

分享到:
评论

相关推荐

    AS3+XML+flash cs3 网站源码

    - `web.xml`中的数据结构应该符合网站的需求,可能包含图片URL、描述、标题等信息,这些数据会被AS3代码读取并显示在网页上。 - `img`目录可能包含了网站使用的图像资源,如图片列表中的图片文件。 这个项目展示...

    FLASH AS2 读取asp

    标题中的“FLASH AS2 读取asp”指的是在Flash ActionScript 2.0环境中与ASP (Active Server Pages)服务器端脚本进行交互的技术。在AS2中,通过XMLSocket类或者URLLoader类可以实现客户端与服务器的数据通信。下面将...

    网页flash-swf文件下载(办)方法

    如果知道SWF文件的URL,可以直接在浏览器地址栏输入该链接进行访问和下载。这种方法适用于那些没有加密或限制直接访问的SWF文件。不过,对于大多数嵌入式Flash内容,直接URL往往隐藏在网页代码中,需要通过开发者...

    Flash传递参数

    1. **URL变量**: 通过在SWF文件的URL中添加查询字符串,可以向Flash传递参数。例如,`http://example.com/flash.swf?param1=value1&param2=value2`。在Flash中,你可以使用`loaderInfo.parameters`对象来访问这些...

    as3加载xml实例

    AS3(ActionScript 3)是Adobe Flash Platform中用于创建交互式内容、动画以及富互联网应用程序的主要编程语言。在这个“as3加载xml实例”中,我们将深入探讨如何使用AS3来加载XML文件,并将其中的数据用于显示文本...

    flash摄像头示例

    SWF文件包含了FLA文件中的所有内容,但是以二进制格式存储,可以直接在支持Flash的浏览器中播放。通过查看这个SWF文件,我们可以观察到摄像头是如何在实际环境中工作的,例如如何显示视频预览,以及是否包含任何交互...

    Flash与JavaScript的通信例子及总结(源码)

    - `Flash`:Flash源文件(可能是`.fla`或`.swf`),其中包含了使用External Interface或Bridge技术实现的AS3代码。 通过阅读和运行这些源码,你可以更直观地了解Flash与JavaScript如何进行通信,以及在实际项目中...

    as3 flv播放器

    而"flv播放.swf"是编译后的可执行文件,可以直接在支持Flash的浏览器中运行。初学者可以通过研究这两个文件来学习AS3 FLV播放器的实现细节。 总之,AS3 FLV播放器为初学者提供了一个学习如何在Flash环境中处理视频...

    为FLASH添加超链接

    "为FLASH添加超链接"这个话题就是针对这种情况,尤其是当你没有原始的Flash源文件时,如何在已有的SWF文件中添加链接。 首先,我们需要了解Flash中的链接是如何实现的。在Flash创作环境中,通常会通过ActionScript...

    四种方法教你实现SWF视觉全屏.txt

    ### 四种方法教你实现SWF视觉全屏 在探讨如何实现SWF文件全屏...需要注意的是,随着技术的发展,Flash的使用率正在逐渐下降,很多浏览器已经默认禁用了Flash插件,因此在实际应用中还需考虑兼容性和未来趋势的问题。

    flash+xml简约的mp3播放器flash素材

    4. `mp3Player_white.swf` 和 `mp3Player_black.swf`:这是编译后的SWF文件,可以直接在浏览器中运行,是Flash应用程序的实际执行文件。 5. `说明read me.txt`:通常包含项目的基本信息和使用指南。 6. `访问ZCool....

    flash 云标签

    【标题】"Flash AS 云标签" 是一种在网页中实现动态展示标签的Flash技术,主要使用ActionScript 3(AS3)编程语言。这种技术可以让标签以云状布局显示,用户可以交互式地选择标签,点击后通常会跳转到相关页面或触发...

    jsp中播放flash

    例如,如果是用AS3(ActionScript 3)编写的播放器,可能有一个`loadVideo`方法,我们可以通过FlashVars参数传递视频URL。假设`player.swf`支持这种方式,我们可以这样修改HTML代码: ```html ``` 或者在`&lt;embed&gt;`...

    flash图片切换效果

    3. **整合**:在ActionScript中解析XML文件,将图片信息加载到Flash组件中,并根据XML设置执行相应的切换效果。 4. **测试与发布**:预览并测试SWF文件,确保图片切换效果正常,然后将SWF文件嵌入到HTML网页中。 5...

    Flash Action 2.0常用函数

    此参数的`key`部分可以使用Flash“键盘键和键控代码值”中所列的任何键控代码进行指定,或者使用Key对象的属性摘要中列出的任何键常量进行指定。 **描述**:通过`on`事件处理函数,可以指定触发动作的鼠标事件或...

    js调flash的方法

    该方法需要传入SWF文件的URL、占位符ID、宽度、高度等参数,例如: ```javascript swfobject.embedSWF("myFlash.swf", "flashcontent", "400", "300", "9.0.0"); ``` 4. **设置Flash参数和属性**:可以通过`...

    大名鼎鼎SWFUpload- Flash+JS 上传

     在发行包(SWFUpload v2)中含有2个版本的Flash控件(swfupload_f8.swf 与wfupload_f9.swf),其中第一个版本拥有最佳的兼容性,但是为此损失了部分功能;而第二个版本提供了一些附加的功能但是损失了兼容性。 ...

    十分漂亮的迷你Flash+txt多首音乐播放器

    综上所述,这个压缩包中的迷你Flash音乐播放器是一个结合了传统Flash技术和简单文本播放列表的解决方案,虽然可能面临现代浏览器的兼容性挑战,但它展示了如何在早期互联网时代通过技术实现丰富的用户体验。

    Flash XSS漏洞挖掘1

    - **URL输入**:`loaderInfo.parameters`允许通过URL传递参数给SWF,通过`contentLoaderInfo.parameters`获取其值。 - **FlashVars**:FlashVars的使用简便,但需将SWF与HTML文件一起发布。通过修改HTML代码,在`...

Global site tag (gtag.js) - Google Analytics