使用Coldfusion获取浏览器和版本 [英] Obtaining browser and version using Coldfusion

查看:93
本文介绍了使用Coldfusion获取浏览器和版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Coldfusion中是否内置某些功能,可以让我知道浏览我的网站的浏览器和版本号?



我的google-fu除了简单的if语句检测IE之外,还没有显示很多其他东西。



我确实在Chrome中转储了cgi.http_user_agent变量:


Mozilla / 5.0( Windows NT 5.1)AppleWebKit / 534.24(KHTML,Gecko一样)Chrome / 11.0.696.77 Safari / 534.24


其中提到了三种不同的浏览器那里!如果执行if语句来查找其中一个,则返回true。

解决方案

有一个用户定义的函数可以解析出user_agent字符串。 / p>

浏览器检测

 < cfscript> 
/ **
*可检测130多种浏览器。 Daniel Harvey的
* v2,添加了Flock / Chrome和Safari修复程序。
*
* @param UserAgent要解析的用户代理字符串。默认为cgi.http_user_agent。 (可选)
* @return返回字符串。
* @作者John Bartlett(jbartlett@strangejourney.net)
* @version 4,2009年6月28日
* /
函数browserDetect(){

// CGI浏览器字符串的默认用户代理
var UserAgent = CGI.HTTP_USER_AGENT;

//用于解析版本号的正则表达式
var VerNo = /?v?_??v?[\(?]?([A-Z0-9] * \ 0。){0,9} [A-Z0-9\-。] *(?= [^ A-Z0-9]);

//浏览器名称列表
var BrowserList =;

//识别的浏览器信息
var BrowserName =;
var BrowserVer =;

/ /工作变量
var Browser =;
var tmp =;
var tmp2 =;
var x = 0;


//如果将值传递给函数,则将其用作用户代理
if(ArrayLen(Arguments)EQ 1)UserAgent = Arguments [1];

/ /允许正则表达式在EOL和字符串上匹配
UserAgent = UserAgent&;

//浏览器列表(允许使用正则表达式-例如,请参阅BlackBerry)
BrowserList = 1X | Amaya | Ubuntu APT-HTTP | AmigaVoyager | Android | Arachne | Amiga-AWeb | Arora | Bison | Bluefish | Browsex | Camino | Check& Get | Chimera | Chrome | Contiki | cURL | Democracy |&
Dillo | DocZilla | edbrowse | ELinks | Emacs-W3 | Epiphany | Galeon | Minefield | Firebird |凤凰城|群| IceApe | IceWeasel | IceCat | Gnuzi lla |&
Google | Google-Sitemaps | HTTPClient | HP Web PrintSmart | IBrowse | iCab | ICE浏览器| Kazehakase | KKman | K-Meleon | Konqueror |链接| Lobo | Lynx |马赛克| SeaMonkey | &
muCommander | NetPositive | Navigator | NetSurf | OmniWeb |橡子浏览|牛至| Prism | retawq | Shiira Safari | Shiretoko | Sleipnir | Songbird | Strata | Sylera | &
ThunderBrowse | W3CLineMode | WebCapture | WebTV | w3m | Wget | Xenu_Link_Sleuth | Oregano | xChaos_Arachne | WDG_Validator | W3C_Validator | &
拼图| PLAYSTATION 3 | PlayStation Portable | IPD | &
AvantGo | DoCoMo | UP.Browser |沃达丰| J-PHONE | PDXGW | ASTEL | EudoraWeb | Minimo | PLink | NetFront | Xiino |;
//移动字符串
BrowserList = BrowserList& iPhone |沃达丰| J-PHONE | DDIPocket | EudoraWeb | Minimo | PLink | Plucker | NetFront | PIE | Xiino | &
Opera Mini | IEMobile | portalmmm | OpVer | MobileExplorer |西装外套| MobileExplorer | Opera Mobi | BlackBerry\d * [A-Za-z]?| &
PPC | PalmOS |智能手机| Netscape | Opera | Safari | Firefox | MSIE | HP iPAQ | LGE | MOT- [A-Z0-9\-] * |诺基亚|;

//没有指定浏览器版本
BrowserList = BrowserList& AlphaServer | Charon | Fetch | Hv3 | IIgs | Mothra | Netmath | OffByOne | pango-文本| Avant浏览器| midori | Smart Bro | Swiftfox;

//识别浏览器和版本
Browser = REMatchNoCase((#BrowserList#)/?#VerNo#,UserAgent);

if(ArrayLen(Browser)GT 0){

if(ArrayLen(Browser)GT 1){

//如果检测到多个浏览器,如果(Browser [1] EQ MSIE 6.0 AND Browser [2] EQ MSIE 7.0)ArrayDeleteAt(Browser,1);删除常见的欺骗浏览器
;
if(Browser [1] EQ MSIE 7.0 AND Browser [2] EQ MSIE 6.0)ArrayDeleteAt(Browser,2);
tmp2 = Browser [ArrayLen(Browser)];

for(x = ArrayLen(Browser); x GTE 1; x = x-1){
tmp = Rematchnocase( [A-Za-z0-9。] *,浏览器[x]);
if(ListFindNoCase( Navigator,Netscape,Opera,Safari,Firefox,MSIE,PalmOS,PPC,tmp [1] GT 0)ArrayDeleteAt(Browser,x);
}

if(ArrayLen(Browser)EQ 0)Browser [1] = tmp2;
}

//分隔浏览器名称和版本号
tmp = Rematchnocase( [A-Za-z0-9。_\-&] *,浏览器[1]);

Browser = tmp [1];

if(ArrayLen(tmp)EQ 2)BrowserVer = tmp [2];

//在浏览器字符串
中处理版本 tmp = REMatchNoCase( Version /?#VerNo#,UserAgent);

if(ArrayLen(tmp)EQ 1){
tmp = Rematchnocase( [A-Za-z0-9。] *,tmp [1]);
BrowserVer = tmp [2];
}

//处理多个BlackBerry浏览器字符串
if(Left(Browser,10)EQ BlackBerry)Browser = BlackBerry;

//返回结果
return浏览器& & BrowserVer;

}

//无法识别浏览器
返回未知;

}
< / cfscript>


Is there something built into Coldfusion that would let me know the browser and version number surfing my site? Are there existant libraries that would enable me to do this?

My google-fu hasn't shown many things other than simple if statements detecting IE.

I did do a dump of the cgi.http_user_agent variable in Chrome:

Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24

There's three different browsers mentionned in there! Doing an if statement looking for either would return true. There's got to be a more formal approach?

解决方案

There is a User-Defined Function which can parse out the user_agent string.

browserDetect

<cfscript>
/**
 * Detects 130+ browsers.
 * v2 by Daniel Harvey, adds Flock/Chrome and Safari fix.
 * 
 * @param UserAgent      User agent string to parse. Defaults to cgi.http_user_agent. (Optional)
 * @return Returns a string. 
 * @author John Bartlett (jbartlett@strangejourney.net) 
 * @version 4, June 28, 2009 
 */
function browserDetect() {

// Default User Agent to the CGI browser string
var UserAgent=CGI.HTTP_USER_AGENT;

// Regex to parse out version numbers
var VerNo="/?v?_? ?v?[\(?]?([A-Z0-9]*\.){0,9}[A-Z0-9\-.]*(?=[^A-Z0-9])";

// List of browser names
var BrowserList="";

// Identified browser info
var BrowserName="";
var BrowserVer="";

// Working variables
var Browser="";
var tmp="";
var tmp2="";
var x=0;


// If a value was passed to the function, use it as the User Agent
if (ArrayLen(Arguments) EQ 1) UserAgent=Arguments[1];

// Allow regex to match on EOL and instring
UserAgent=UserAgent & " ";

// Browser List (Allows regex - see BlackBerry for example)
BrowserList="1X|Amaya|Ubuntu APT-HTTP|AmigaVoyager|Android|Arachne|Amiga-AWeb|Arora|Bison|Bluefish|Browsex|Camino|Check&Get|Chimera|Chrome|Contiki|cURL|Democracy|" &
            "Dillo|DocZilla|edbrowse|ELinks|Emacs-W3|Epiphany|Galeon|Minefield|Firebird|Phoenix|Flock|IceApe|IceWeasel|IceCat|Gnuzilla|" &
            "Google|Google-Sitemaps|HTTPClient|HP Web PrintSmart|IBrowse|iCab|ICE Browser|Kazehakase|KKman|K-Meleon|Konqueror|Links|Lobo|Lynx|Mosaic|SeaMonkey|" &
            "muCommander|NetPositive|Navigator|NetSurf|OmniWeb|Acorn Browse|Oregano|Prism|retawq|Shiira Safari|Shiretoko|Sleipnir|Songbird|Strata|Sylera|" &
            "ThunderBrowse|W3CLineMode|WebCapture|WebTV|w3m|Wget|Xenu_Link_Sleuth|Oregano|xChaos_Arachne|WDG_Validator|W3C_Validator|" &
            "Jigsaw|PLAYSTATION 3|PlayStation Portable|IPD|" &
            "AvantGo|DoCoMo|UP.Browser|Vodafone|J-PHONE|PDXGW|ASTEL|EudoraWeb|Minimo|PLink|NetFront|Xiino|";
            // Mobile strings
            BrowserList=BrowserList & "iPhone|Vodafone|J-PHONE|DDIPocket|EudoraWeb|Minimo|PLink|Plucker|NetFront|PIE|Xiino|" &
            "Opera Mini|IEMobile|portalmmm|OpVer|MobileExplorer|Blazer|MobileExplorer|Opera Mobi|BlackBerry\d*[A-Za-z]?|" &
            "PPC|PalmOS|Smartphone|Netscape|Opera|Safari|Firefox|MSIE|HP iPAQ|LGE|MOT-[A-Z0-9\-]*|Nokia|";

            // No browser version given
            BrowserList=BrowserList & "AlphaServer|Charon|Fetch|Hv3|IIgs|Mothra|Netmath|OffByOne|pango-text|Avant Browser|midori|Smart Bro|Swiftfox";

            // Identify browser and version
Browser=REMatchNoCase("(#BrowserList#)/?#VerNo#",UserAgent);

if (ArrayLen(Browser) GT 0) {

    if (ArrayLen(Browser) GT 1) {

        // If multiple browsers detected, delete the common "spoofed" browsers
        if (Browser[1] EQ "MSIE 6.0" AND Browser[2] EQ "MSIE 7.0") ArrayDeleteAt(Browser,1);
        if (Browser[1] EQ "MSIE 7.0" AND Browser[2] EQ "MSIE 6.0") ArrayDeleteAt(Browser,2);
        tmp2=Browser[ArrayLen(Browser)];

        for (x=ArrayLen(Browser); x GTE 1; x=x-1) {
            tmp=Rematchnocase("[A-Za-z0-9.]*",Browser[x]);
            if (ListFindNoCase("Navigator,Netscape,Opera,Safari,Firefox,MSIE,PalmOS,PPC",tmp[1]) GT 0) ArrayDeleteAt(Browser,x);
        }

        if (ArrayLen(Browser) EQ 0) Browser[1]=tmp2;
    }

    // Seperate out browser name and version number
    tmp=Rematchnocase("[A-Za-z0-9. _\-&]*",Browser[1]);

    Browser=tmp[1];

    if (ArrayLen(tmp) EQ 2) BrowserVer=tmp[2];

    // Handle "Version" in browser string
    tmp=REMatchNoCase("Version/?#VerNo#",UserAgent);

    if (ArrayLen(tmp) EQ 1) {
        tmp=Rematchnocase("[A-Za-z0-9.]*",tmp[1]);
        BrowserVer=tmp[2];
    }

    // Handle multiple BlackBerry browser strings
    if (Left(Browser,10) EQ "BlackBerry") Browser="BlackBerry";

    // Return result
    return Browser & " " & BrowserVer;

}

// Unable to identify browser
return "Unknown";

}
</cfscript>

这篇关于使用Coldfusion获取浏览器和版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆