I use the below function to grab the browser that a user is currently using:
Called from:
<cfset Browser=GetBrowser(cgi.htt
<cffunction access="public" name="GetBrowser" output="true" >
<cfargument name="browserdata" required="true" type="string">
<cfscript>
BrowserVersion="other";
MozillaVersion="other";
BrowserName="other";
Platform="other";
CssFriendly="no";
DhtmlFriendly="no";
FlashFriendly="no";
XmlFriendly="no";
JavaFriendly="no";
JavaScriptFriendly="no";
JSVersion="no";
EcmaCompliant="no";
Mozilla=Find("Mozilla", ARGUMENTS.browserdata);
MSIE=Find("MSIE", ARGUMENTS.browserdata);
Opera=Find("Opera", ARGUMENTS.browserdata);
WebTv=Find("WebTV", ARGUMENTS.browserdata);
Lynx=Find("Lynx", ARGUMENTS.browserdata);
AOL=Find("AOL", ARGUMENTS.browserdata);
compatible=Find("compatible", ARGUMENTS.browserdata);
if (Lynx EQ 0){
MozillaVersion=GetToken(ARGUMENTS.browserdata, 2, "/ (");
}
//Browser name and version?
if (Mozilla NEQ 0 and MSIE EQ 0 and Opera EQ 0 and WebTV EQ 0 and Lynx EQ 0
and AOL EQ 0 and compatible EQ 0){
BrowserName="Firefox";
if (MozillaVersion GTE "5"){
BrowserVersion=GetToken(ARGUMENTS.browserdata, 4, "/");
//BrowserVersion=RemoveChars(BrowserVersion, 1, 17);
}
else{
BrowserVersion=MozillaVersion;
}
}
else if (MSIE NEQ 0 and Opera EQ 0 and WebTV EQ 0 and Lynx EQ 0 and AOL EQ
0){
BrowserName="Microsoft IE";
BrowserVersion=GetToken(ARGUMENTS.browserdata, 2, ";");
BrowserVersion=RemoveChars(BrowserVersion, 1, 5);
}
else if (AOL NEQ 0){
BrowserName="AOL";
BrowserVersion=GetToken(ARGUMENTS.browserdata, 2, " ");
}
else if (Opera NEQ 0){
BrowserName="Opera";
BrowserVersion=GetToken(ARGUMENTS.browserdata, 2, ")");
if(Len(BrowserVersion) GT 7) {
BrowserVersion=RemoveChars(BrowserVersion, 1, 7);
BrowserVersion=Replace(BrowserVersion, " [en]", "");
}
}
else if (WebTV NEQ 0){
BrowserName="WebTV";
BrowserVersion=GetToken(ARGUMENTS.browserdata, 4, "/ ");
}
else if (Lynx NEQ 0){
BrowserName="Lynx";
BrowserVersion=GetToken(ARGUMENTS.browserdata, 1, "r");
BrowserVersion=RemoveChars(BrowserVersion, 1, 5);
}
//Determine Platform
if (FindNoCase("win", ARGUMENTS.browserdata) NEQ 0){
Platform="Windows";
}
else if (FindNoCase("mac", ARGUMENTS.browserdata) NEQ 0){
Platform="Macintosh";
}
else if (FindNoCase("xll", ARGUMENTS.browserdata) NEQ 0){
Plarform="Unix";
if (FindNoCase("inux", ARGUMENTS.browserdata) NEQ 0){
Platform="Linux";
}
}
else if ((FindNoCase("os/2", ARGUMENTS.browserdata) NEQ 0) OR
(FindNoCase("ibm-webexplorer", ARGUMENTS.browserdata) NEQ 0)){
Platform="OS/2";
}
else if (FindNoCase("webtv", ARGUMENTS.browserdata) NEQ 0){
Platform="WebTV";
}
//DCSS friendly?
if ((BrowserName EQ "Netscape" AND BrowserVersion GTE 4) OR (BrowserName EQ
"Microsoft" AND BrowserVersion GTE 4) OR (BrowserName EQ "AOL" AND
BrowserVersion GTE 3) OR (BrowserName EQ "Opera" AND BrowserVersion GTE 3.6)
OR (BrowserName EQ "WebTV")){
CssFriendly="Yes";
}
//DHTML friendly?
if ((BrowserName EQ "Netscape" AND BrowserVersion GTE 4) OR (BrowserName EQ
"Microsoft" AND BrowserVersion GTE 4) OR (BrowserName EQ "AOL" AND
BrowserVersion GTE 4)){
DhtmlFriendly="Yes";
}
//XML friendly?
if ((BrowserName EQ "Netscape" AND BrowserVersion GTE 6) OR (BrowserName EQ
"Microsoft" AND BrowserVersion GTE 5) OR (BrowserName EQ "Opera" AND
BrowserVersion GTE 4)){
XmlFriendly="Yes";
}
//JAVA friendly?
if ((BrowserName EQ "Netscape" AND BrowserVersion GTE 3) OR (BrowserName EQ
"Microsoft" AND BrowserVersion GTE 3) OR (BrowserName EQ "AOL" AND
BrowserVersion GTE 3)){
JavaFriendly="Yes";
}
//Javascript friendly? What version? ECMA compliant?
if ((BrowserName EQ "Netscape" AND BrowserVersion GTE 2) OR (BrowserName EQ
"Microsoft" AND BrowserVersion GTE 3) OR (BrowserName EQ "AOL" AND
BrowserVersion GTE 3) OR (BrowserName EQ "Opera" AND BrowserVersion GTE 3.5)
OR (BrowserName EQ "WebTV")){
JavaScriptFriendly="Yes";
JSVersion="1.0";
EcmaCompliant="No";
if (BrowserName EQ "Netscape"){
if (BrowserVersion GTE 2){
JSVersion="1.0";
EcmaCompliant="No";
}
if (BrowserVersion GTE 3){
JSVersion="1.1";
EcmaCompliant="No";
}
if (BrowserVersion GTE 4){
JSVersion="1.2";
EcmaCompliant="No";
}
if (BrowserVersion GTE 4.06){
JSVersion="1.3";
EcmaCompliant="Yes";
}
if (BrowserVersion GTE 6){
JSVersion="1.5";
EcmaCompliant="Yes";
}
}
if (BrowserName EQ "Microsoft"){
if (BrowserVersion GTE 3){
JSVersion="1.1";
EcmaCompliant="No";
}
if (BrowserVersion GTE 4){
JSVersion="1.2";
EcmaCompliant="No";
}
if (BrowserVersion GTE 4.5){
JSVersion="1.3";
EcmaCompliant="Yes";
}
if (BrowserVersion GTE 5){
JSVersion="1.3";
EcmaCompliant="Yes";
}
}
if (BrowserName EQ "Opera" AND BrowserVersion GTE 5){
JSVersion="1.2";
EcmaCompliant="No";
}
if (BrowserName EQ "WebTV"){
JSVersion="1.2";
EcmaCompliant="No";
}
if (BrowserName EQ "AOL" AND BrowserVersion GTE 3){
JSVersion="1.2";
EcmaCompliant="No";
}
}
//Set Callers
CALLER.browserdata="#ARGUMENTS.browserdata#";
CALLER.MozillaVersion="#MozillaVersion#";
CALLER.BrowserName="#BrowserName#";
CALLER.BrowserVersion="#BrowserVersion#";
CALLER.Platform="#Platform#";
CALLER.CssFriendly="#CssFriendly#";
CALLER.DhtmlFriendly="#DhtmlFriendly#";
CALLER.XmlFriendly="#XmlFriendly#";
CALLER.JavaFriendly="#JavaFriendly#";
CALLER.JavaScriptFriendly="#JavaScriptFriendly#";
CALLER.JSVersion="#JSVersion#";
CALLER.EcmaCompliant="#EcmaCompliant#";
</cfscript>
<cfset Browser=#BrowserName#&" "&#BrowserVersion#>
<cfreturn Browser>
</cffunction>
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198:





by: duncancummingPosted on 2008-12-19 at 15:42:39ID: 23216381
You should seriously look at either software that analyses your webserve log files (e.g. Analog) or a service which runs in the client and does the same thing (e.g. Google Analytics). Not the answer you want, but it sounds like you're reinventing the wheel they've already made.
Alternatively find an open source equivalent, and borrow their logic for extracting the browser name out of the User Agent string.