您看到的是一个将检索浏览器名称,版本和操作系统的脚本。我不久前把这个脚本从网上拿下来了,直到今天一位测试的同事指出它在IE9中没有用(我一直在开发Chrome41和IE11)。我知道IE的令牌被改为" rv"我假设IE的两个实例都会返回一个值,因为我在IF语句中都有这两个条件。但是在IE9中根本没有返回任何细节。想法?
JS
//Browser name & version
{
var unknown = '-';
//browser
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browser = navigator.appName;
var version = '' + parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion, 10);
var nameOffset, verOffset, ix;
// Opera
if ((verOffset = nAgt.indexOf('Opera')) != -1) {
browser = 'Opera';
version = nAgt.substring(verOffset + 6);
if ((verOffset = nAgt.indexOf('Version')) != -1) {
version = nAgt.substring(verOffset + 8);
}
}
// MSIE
else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(verOffset + 5);
}
// Chrome
else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
browser = 'Chrome';
version = nAgt.substring(verOffset + 7);
}
// Safari
else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
browser = 'Safari';
version = nAgt.substring(verOffset + 7);
if ((verOffset = nAgt.indexOf('Version')) != -1) {
version = nAgt.substring(verOffset + 8);
}
}
// Firefox
else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
browser = 'Firefox';
version = nAgt.substring(verOffset + 8);
}
// MSIE 11+
else if (nAgt.indexOf('Trident/') != -1) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(nAgt.indexOf('rv:') + 3);
}
// Other browsers
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
browser = nAgt.substring(nameOffset, verOffset);
version = nAgt.substring(verOffset + 1);
if (browser.toLowerCase() == browser.toUpperCase()) {
browser = navigator.appName;
}
}
// trim the version string
if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
majorVersion = parseInt('' + version, 10);
if (isNaN(majorVersion)) {
version = '' + parseFloat(navigator.appVersion);
majorVersion = parseInt(navigator.appVersion, 10);
}
// Operating System Version
var os = unknown;
var clientStrings = [
{ s: 'Windows 3.11', r: /Win16/ },
{ s: 'Windows 95', r: /(Windows 95|Win95|Windows_95)/ },
{ s: 'Windows ME', r: /(Win 9x 4.90|Windows ME)/ },
{ s: 'Windows 98', r: /(Windows 98|Win98)/ },
{ s: 'Windows CE', r: /Windows CE/ },
{ s: 'Windows 2000', r: /(Windows NT 5.0|Windows 2000)/ },
{ s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },
{ s: 'Windows Server 2003', r: /Windows NT 5.2/ },
{ s: 'Windows Vista', r: /Windows NT 6.0/ },
{ s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },
{ s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },
{ s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },
{ s: 'Windows NT 4.0', r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },
{ s: 'Windows ME', r: /Windows ME/ },
{ s: 'Android', r: /Android/ },
{ s: 'Open BSD', r: /OpenBSD/ },
{ s: 'Sun OS', r: /SunOS/ },
{ s: 'Linux', r: /(Linux|X11)/ },
{ s: 'iOS', r: /(iPhone|iPad|iPod)/ },
{ s: 'Mac OS X', r: /Mac OS X/ },
{ s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },
{ s: 'QNX', r: /QNX/ },
{ s: 'UNIX', r: /UNIX/ },
{ s: 'BeOS', r: /BeOS/ },
{ s: 'OS/2', r: /OS\/2/ },
{ s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/ }
];
for (var id in clientStrings) {
var cs = clientStrings[id];
if (cs.r.test(nAgt)) {
os = cs.s;
break;
}
}
var osVersion = unknown;
if (/Windows/.test(os)) {
osVersion = /Windows (.*)/.exec(os)[1];
os = 'Windows';
}
switch (os) {
case 'Mac OS X':
osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;
case 'Android':
osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
break;
case 'iOS':
osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
break;
}
}
window.jscd = {
browser: browser,
browserVersion: version,
os: os,
osVersion: osVersion
};
document.getElementById("browserName").innerHTML = jscd.browser;
document.getElementById("browserVersion").innerHTML = jscd.browserVersion;
document.getElementById("os").innerHTML = "<b>" + jscd.os + " " + jscd.osVersion + "</b>";
答案 0 :(得分:1)
抱歉,由于我没有声誉,我无法发表评论......
由于兼容模式可能会出现问题吗?
无论如何,您可以查看此http://www.useragentstring.com/pages/Internet%20Explorer/以获取可能的useragent字符串。
当您使用IE9时,您输入的是ELSE IF语句吗?
答案 1 :(得分:0)
错误不在于令牌或使用者。
该项目的要求之一是以彩色显示细节(绿色,如果日期或真实,红色,如果过期或错误)。但是,要实现这一点,我使用了classlist.add属性。
// Colour of browser & versions (Red/Green)
if (jscd.browser == "Chrome" && jscd.browserVersion < "41") {
browserVersion.classList.add('red');
browserName.classList.add('red');
} else if (jscd.browser == "Chrome" && jscd.browserVersion > "41") {
browserVersion.classList.add('green');
browserName.classList.add('green');
}
IE9及以下版本不支持,所以我用.className + =“”替换它;它起作用了。
if (jscd.browser == "Chrome" && jscd.browserVersion < "41") {
browserVersion.className += "red";
browserName.className += "red";
} else if (jscd.browser == "Chrome" && jscd.browserVersion > "41") {
browserVersion.className += "green";
browserName.className += "green";
}