Introduction
Proper detection of Web Browsers' type and capabilities is rather important from the end-user's and developer's prospective as well. The differences between browsers, rooted in either branding or versioning create browser compatibility issues, which could cause some Web applications to run incorrectly if the compatibility requirements were not met.
A simple browser-detection feature could be added to ASP.NET web applications in order to resolve potential compatibility issues and also to help the tech support folks to perform remote troubleshooting based on the clients' feedback regarding the browser they use.
A working DEMO is available at www.webinfocentral.com (refer to the button control named “Check your Browser”). A sample screenshot is shown below in Fig.1:
Figure 1. Sample screenshot demonstrating browser capabilities
Background
This project demonstrates a simple implementation of server-side browser type/capabilities detection feature, written in C# with just a little bit of client-side Java scripting added for better responsiveness and interactivity. The same or even better level of responsiveness/interactivity could be achieved by using either ASP.NET AJAX or Microsoft Silverlight™ RIA technology set instead of JavaScript.
Using the Code
The project (ASP.NET 2.0+ web site) contains:
- Class Module "BrowserInfo.cs" to be placed in AppCode directory
- Default Web page "Default.aspx" to be placed in Application root directory
The core functionality is encapsulated in the class module "BrowserInfo.cs" shown below (notice some optional extensions, commented-off in the code; also, for simplicity and readability this solution is using simple string concatenation. Some performance improvement could be achieved by implementing StringBuilder object for string manipulation):
using System;
using System.Web;
public static class InfosoftBrowserInfo
{
#region Get Browser capabilities
public static string[,] BrowserAttributes
{
get
{
string _agent = String.Empty;
if (HttpContext.Current == null) return null;
try
{
_agent = HttpContext.Current.Request.UserAgent;
HttpBrowserCapabilities _browser = HttpContext.Current.Request.Browser;
string[,] arrFieldValue =
{
{
"Name",
"Version",
"Platform",
"ECMA Script Version",
"Is Mobile Device",
"Is Beta",
"Is Win16",
"Is Win32",
"Supports Frames",
"Supports Tables",
"Supports Cookies",
"Supports CSS",
"Supports VB Script",
"Supports JavaScript",
"Supports Java Applets",
"Supports ActiveX Controls",
"Supports CallBack",
"Supports XMLHttp",
String.Empty,
"User Agent Details"
},
{
(_agent.ToLower().Contains("chrome"))? "Chrome" :_browser.Browser,
(_agent.ToLower().Contains("chrome"))?
"See User Agent Details below" :_browser.Version,
_browser.Platform,
_browser.EcmaScriptVersion.ToString(),
(_browser.IsMobileDevice)? "YES": "NO",
(_browser.Beta)? "YES": "NO",
(_browser.Win16)? "YES": "NO",
(_browser.Win32)? "YES": "NO",
(_browser.Frames)? "YES": "NO",
(_browser.Tables)? "YES": "NO",
(_browser.Cookies)? "YES": "NO",
(_browser.SupportsCss)? "YES": "NO",
(_browser.VBScript)? "YES": "NO",
(_browser.JavaScript)? "YES": "NO",
(_browser.JavaApplets)? "YES": "NO",
(_browser.ActiveXControls)? "YES": "NO",
(_browser.SupportsCallback)? "YES": "NO",
(_browser.SupportsXmlHttp)? "YES": "NO",
String.Empty,
_agent
}
};
return arrFieldValue;
}
catch { return null; }
}
}
public static string BrowserJavaScript
{
get
{
string MsgBrowser = String.Empty;
string[,] arrBrowser = BrowserAttributes;
if (arrBrowser == null) return String.Empty;
try
{
MsgBrowser = "javascript:alert('Your Browser properties: \\n";
for (int i = 0; i < arrBrowser.GetLength(1); i++)
{ MsgBrowser += "\\n" + arrBrowser[0, i] + " : " + arrBrowser[1, i]; }
return MsgBrowser += "')";
}
catch { return String.Empty; }
}
}
#endregion
}
A Sample Web Page contains a single Button1 control with "onclick" event handler added as shown below:
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Browser Detection } Infosoft International Inc</title>
<script runat="server">
private string _browser;
protected void Page_PreInit(object sender, EventArgs e)
{_browser = InfosoftBrowserInfo.BrowserJavaScript;}
protected void Page_Load(object sender, EventArgs e)
{ Button1.Attributes.Add("onclick", _browser);}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<br />
<asp:Button ID="Button1" runat="server" Text="Get Browser Info" />
<br />
</div>
</form>
</body>
</html>
Points of Interest
The solution is tested for compatibility with four major Web browsers:
- Microsoft Internet Explorer 7.0+
- Mozilla Firefox
- Google Chrome
- Apple Safari
History
- Article posted on 09/14/2009