Introduction
Proper detection of Web Browsers' type and capabilities is rather important from both end-user's and developer's perspectives. The differences between Web Browsers, rooted in either branding or versioning, could cause serious portability issues, potentially resulting in some Web applications rendering incorrectly, or even not running at all. Hopefully, strict adherence to emerging HTML5/CSS3 specs will help to dramatically improve inter-browsers compatibility and, correspondingly, the portability of Web apps.
Solution
A simple browser-detection feature could be added to ASP.NET web applications providing valuable feedback to end users and also helping the tech support folks to perform remote troubleshooting based on the clients' input regarding the web browser(s) in use.
Demo
A working DEMO is available at www.webinfocentral.com (click on the button “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.
Code
The project code written in C# compatible with any ASP.NET 2.0+ web site contains the following:
- 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
- Updated on 9/21/2012