Reputation: 7707
I've created a userAgent sniffing javascript application (for experimental/learning purposes only) and I'm almost finished. But, for the $browser.version, I'm getting the whole userAgent string. I've google'd and google'd and cannot find the answer. Here's my code:
// contemplate new $browser module
var $browser, versionOffset, ua = navigator.userAgent;
if(ua.toLowerCase().indexOf('opera') > -1) {
$browser = {
name: "Opera",
engine: "Presto",
prefix: "-o-",
publisher: "Opera Software ASA",
version: ua.substring(versionOffset + 6)
}
}
else if(ua.toLowerCase().indexOf('msie') > -1) {
$browser = {
name: "Internet Explorer",
engine: "Trident",
prefix: "-ms-",
publisher: "Microsoft",
version: ua.substring(versionOffset + 5)
}
}
else if(ua.toLowerCase().indexOf('chrome') > -1) {
$browser = {
name: "Chrome",
engine: "WebKit",
prefix: "-webkit-",
publisher: "Google Inc.",
version: ua.substring(versionOffset + 7)
}
}
else if(ua.toLowerCase().indexOf('safari') > -1) {
$browser = {
name: "Safari",
engine: "WebKit",
prefix: "-webkit-",
publisher: "Apple Computer Inc.",
version: ua.substring(versionOffset + 8)
}
}
else if(ua.toLowerCase().indexOf('firefox') > -1) {
$browser = {
name: "Firefox",
engine: "Gecko",
prefix: "-moz-",
publisher: "Mozilla",
version: ua.substring(versionOffset + 8)
}
}
So in my HTML, I'm doing:
<script>
alert($browser.name + " " + $browser.version);
</script>
But my output in chrome is:
[JavaScript Alert]:
Chrome ($browser.name)
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.91 Safari/537.4 ($browser.version)
But I want, obviously "Chrome 22" or "Chrome 22.0.1229.91"
Upvotes: 0
Views: 140
Reputation: 23796
Your code doesn't make much sense to me as it stands. You have to use things like versionOFfset, etc. Also, note that doing something like this: ua.substring(versionOffset + 8)
will return the entire string starting from versionOffset+8. So, since you never actually SET versionOffset, it it is undefined, so doing: versionOffset+8 returns NaN, JS helpfully ignores that and decides to just substitute a zero for NaN (basically), so you end up with the entire ua string being returned. Here's a fiddle that may be closer to what you're looking for:
else if((versionOffset = ua.toLowerCase().indexOf('chrome')) > -1) {
$browser = {
name: "Chrome",
engine: "WebKit",
prefix: "-webkit-",
publisher: "Google Inc.",
version: ua.substring(versionOffset + 7).substring(0, ua.indexOf(" "))
}
}
See how I set versionOffset in the if statement, and then I look for the first " " after the version. This is NOT meant to be used in the real world, but like you said, you're just trying to learn.
Upvotes: 0
Reputation: 13099
This fixes it - 2digit version number returned.
You need to set the versionOffset, as has already been mentioned.
else if(ua.toLowerCase().indexOf('chrome') > -1)
{
versionOffset = ua.toLowerCase().indexOf('chrome');
$browser = {
name: "Chrome",
engine: "WebKit",
prefix: "-webkit-",
publisher: "Google Inc.",
version: ua.substr(versionOffset+7, 2)
}
}
Upvotes: 1