在摸索WEB网页扫描二维码和条形码过程,因为方法基本各大浏览器都不怎么兼容,只能通过判断各个浏览器然后找解决方法,所以亲自实验了一些原生判断浏览器和平台的方法.如有错误,请指正。废话不多说,开始贴代码!
try{
var validate = function(agent) {
return navigator.userAgent.indexOf(agent) > -1;
}
var validPlatform = function(platformStr) {
return navigator.platform.toUpperCase().indexOf(platformStr) > -1;
}
iBrowser = {
kernel : {
Trident : validate('Trident'), // IE Kernel
Presto : validate('Presto'), // Opera Kernel
WebKit : validate('AppleWebKit') ,// Apple、Chrome Kernel
Gecko : validate('Gecko') // Firefox Kernel
&& navigator.userAgent.indexOf('KHTML') == -1
},
platform : {
// Whether the mobile terminal
isMobile : !!navigator.userAgent.match(/AppleWebKit.*Mobile.*/)
|| !!navigator.userAgent.match(/AppleWebKit/)
&& !(validPlatform('WIN') || validPlatform('MAC') || validPlatform('LINUX')),
// IOS terminal
isIOS : !!navigator.userAgent
.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
|| validate('iPhone OS'),
isAndroid : validate('Android') || validate('Linux'), // android终端
isiPhone : validate('iPhone') && validPlatform('IPHONE'), // 是否为iPhone
isiPad : validate('iPad'), // 是否iPad
isPC : validPlatform('WIN') || validPlatform('MAC')
|| validPlatform('LINUX')
},
browser : function() {
var u = navigator.userAgent;
return {
isIE : (window.ActiveXObject && navigator.appName
.indexOf("Microsoft") > -1),
isQQBrowser : validate('QQBrowser'),
isUBrowser : validate('UBrowser') && validate('AppleWebKit'),
isFirefox : validate('Gecko') && validate('Firefox'),
isWeChat : validate('MicroMessenger'), // 是否微信 (2015-01-22新增);
isWebApp : u.indexOf('Safari') == -1, // 是否web应该程序,没有头部与底部
isQQ : u.match(/\sQQ/i) == 'qq' // 是否QQ
};
}(),
language : navigator.browserLanguage || navigator.language
}
iBrowser.browser.isSafari = function() {
var safariBrowser;
try {
safariBrowser = safari; //Safari浏览器特有对象.
} catch (e) {
} finally {
return ( (safariBrowser ? true : false) && validate('Safari') && validate('AppleWebKit'))
|| validate('iPhone') || validate('Mac');
}
}();
iBrowser.browser.isChrome = function() {
var chromeBrowser;
try {
chromeBrowser = chrome;//PS:该对象是Chrome"内核"特有对象.
} catch (e) {
} finally {
return (chromeBrowser ? true : false) && validate('Chrome') && validate('AppleWebKit');
}
}();
iBrowser.browser.isIE = function() {
var ieBrowser;
try {
//ie内核特有对象. 但ie11之后好像会有问题所以这个条件不是必须的
ieBrowser = window.ActiveXObject;
} catch (e) {
} finally {
return ((window.ActiveXObject ? true : false) || navigator.appName
.indexOf("Microsoft") > -1) && iBrowser.kernel.Trident;
}
}();
var platform = iBrowser.platform;
var browser = iBrowser.browser;
var log = function(obj){
var out = 'isMobile : '+ platform.isMobile +
', isIOS : '+ platform.isIOS +
', isAndroid : '+ platform.isAndroid +
', isiPhone : '+ platform.isiPhone +
', isiPad : '+ platform.isiPad +
', isPC : ' + platform.isPC +
', isSafari : ' + browser.isSafari +
', isIE : ' + browser.isIE +
', isQQBrowser : ' + browser.isQQBrowser +
', isUBrowser : ' + browser.isUBrowser +
', isChrome : ' + browser.isChrome +
', isFirefox : ' + browser.isFirefox +
', isQQ : ' + browser.isQQ +
'\n' + navigator.userAgent + " Platform/" + navigator.platform ;
if(obj === 'log'){
console.log(out);
} else {
alert(out)
}
}
if(platform.isPC){
log('log');
} else {
log('alert')
}
}catch (e) {
iError.printErr(e);
}
如有充足时间,会不定期修改代码.可以保证自己也能随时用到该判断的方法。少了一些功夫。