Skip to content

Instantly share code, notes, and snippets.

@RyanHope
Created March 25, 2012 21:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RyanHope/2200090 to your computer and use it in GitHub Desktop.
Save RyanHope/2200090 to your computer and use it in GitHub Desktop.
Lookup WebSocket support based on browser user agent
UA_FIREFOX = new RegExp(".*Firefox/([0-9+]*).*")
UA_CHROME = new RegExp(".*Chrome/([0-9+]*).*")
UA_CHROMEFRAME = new RegExp(".*chromeframe/([0-9]*).*")
UA_WEBKIT = new RegExp(".*AppleWebKit/([0-9+\.]*)\w*.*")
UA_WEBOS = new RegExp(".*webOS/([0-9+\.]*)\w*.*")
var matchRegex = function(s, r) {
var m = r.exec(s)
if (m) return m[1]
return m
};
var lookupWsSupport = function() {
var ua = navigator.userAgent;
// Firefox
if (ua.indexOf("Firefox") > -1) {
var v = parseInt(matchRegex(ua, UA_FIREFOX))
if (v) {
if (v >= 7)
return [true,false,true]
if (v >= 3)
return [true,true,true]
return [false,false,true]
}
return [false,false,true]
}
// Safari
else if (ua.indexOf("Safari") > -1 && ua.indexOf("Chrome") == -1) {
var v = matchRegex(ua, UA_WEBKIT)
if (v) {
if (ua.indexOf("Windows") > -1 && v == "534+") // Not sure about this test ~RMH
return [true,false,true]
if (ua.indexOf("Macintosh") > -1) {
v = v.replace("+","").split(".")
if ((parseInt(v[0]) == 535 && parseInt(v[1]) >= 24) || parseInt(v[0]) > 535)
return [true,false,true]
}
if (ua.indexOf("webOS") > -1) {
v = matchRegex(ua, UA_WEBOS).split(".")
if (parseInt(v[0]) == 2)
return [false,true,true]
return [false,false,false]
}
return [true,true,true]
}
return [false,false,false]
}
// Chrome
else if (ua.indexOf("Chrome") > -1) {
var v = parseInt(matchRegex(ua, UA_CHROME))
if (v) {
if (v >= 14)
return [true,false,true]
if (v >= 4)
return [true,true,true]
return [false,false,true]
}
return [false,false,false]
}
// Android
else if (ua.indexOf("Android") > -1) {
// Firefox Mobile
if (ua.indexOf("Firefox") > -1)
return [true,false,true]
// Chrome for Android
else if (ua.indexOf("CrMo") > -1)
return [true,false,true]
// Opera Mobile
else if (ua.indexOf("Opera") > -1)
return [false,false,true]
// Android Browser
else if (ua.indexOf("CrMo") > -1)
return [true,true,true]
return [false,false,false]
}
// iOS
else if (ua.indexOf("iPhone") > -1 || ua.indexOf("iPad") > -1 || ua.indexOf("iPod") > -1)
return [false,false,true]
// Unidentified
return [false,false,false]
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment