首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Coldfusion获取浏览器和版本

使用Coldfusion获取浏览器和版本
EN

Stack Overflow用户
提问于 2011-06-09 14:59:53
回答 8查看 15.9K关注 0票数 5

是否有什么可以让我知道浏览器和版本号在浏览我的网站的Cold聚变?是否有一些现有的库可以让我做到这一点?

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

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

Mozilla/5.0 (WindowsNT5.1) AppleWebKit/534.24 (KHTML,类似壁虎) Chrome/11.0.696.77 Safari/534.24

里面有三种不同的浏览器!如果执行一条if语句,查找这两种语句都会返回true。一定要有更正式的方法吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-06-09 15:31:42

有一个用户定义的函数可以解析出user_agent字符串.

browserDetect

代码语言:javascript
复制
<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>
票数 3
EN

Stack Overflow用户

发布于 2014-10-02 19:04:23

这比之前提交的复杂函数容易得多.

代码语言:javascript
复制
<CFIF FindNoCase('Chrome','#CGI.HTTP_USER_AGENT#') GREATER THAN 0>
  <CFSET browser = 'Chrome'>
</CFIF>

信贷:browser.php

票数 5
EN

Stack Overflow用户

发布于 2011-06-09 15:08:05

你能不能不要用javascript代替?http://cssuseragent.org/

CSSUA非常棒,它将简单的类添加到标记中,并允许您使用ua-ie-6等类来实现CSS/Javascript中的目标内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6294932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档