我正在编写一个功能来检测用户的浏览器并确定它是否为私有。
我能够检测所有浏览器,例如Chrome,Mozilla,Safari,IE,Opera,但只有UC浏览器才是问题。我的功能适用于所有浏览器,也适用于台式机中的UC,但如果使用移动设备,则不适用于UC Browser。
function isPrivateMode() {
var currBrowser = '';
var on = function on() {
document.getElementById('browser').innerText = 'Your browser is '+ currBrowser;
console.log('Your browser is ', currBrowser);
document.getElementById('browserMode').innerText = 'You are using private browser';
console.log('You are using private browser');
}; // is in private mode
var off = function off() {
document.getElementById('browser').innerText = 'Your browser is '+ currBrowser;
console.log('Your browser is ', currBrowser);
document.getElementById('browserMode').innerText = 'You aren\'t using private browser';
console.log('You aren\'t using private browser');
}; // not private mode
var testLocalStorage = function testLocalStorage() {
try {
if (localStorage.length) {
off();
} else {
localStorage.x = 1;
localStorage.removeItem('x');
off();
};
} catch (e) {
on();
}
};
var is_chrome = navigator.userAgent.indexOf('Chrome') > -1;
var is_explorer = window.MSPointerEvent ? true : false;
var is_firefox = navigator.userAgent.indexOf('Firefox') > -1;
var is_safari = navigator.userAgent.indexOf("Safari") > -1;
var is_opera = navigator.userAgent.toLowerCase().indexOf("op") > -1;
var is_uc = navigator.userAgent.toLowerCase().indexOf('ubrowser') > -1 || navigator.userAgent.toLowerCase().indexOf('ucbrowser') > -1;
if ((is_chrome) && (is_safari)) { is_safari = false; }
if ((is_chrome) && (is_opera)) { is_chrome = false; }
if ((is_chrome) && (is_uc)) { is_chrome = false; }
if ((is_opera) && (is_uc)) { is_opera = false; }
// Chrome & Opera
if (is_chrome || is_opera) {
if(is_chrome){
currBrowser = 'Chrome';
}
if(is_opera){
currBrowser = 'Opera';
}
return void window.webkitRequestFileSystem(0, 0, off, on);
}
// UC Browser
if(is_uc){
currBrowser = 'UC';
if (window.webkitRequestFileSystem) {
window.webkitRequestFileSystem(
window.TEMPORARY, 1,
function() {
return off();
},
function(e) {
console.log(e);
return on();
}
);
}
}
// Firefox
if (is_firefox) {
currBrowser = 'Firefox';
var db = indexedDB.open('test');
db.onerror = on;
db.onsuccess = off;
return void 0;
}
// Safari
if(is_safari){
currBrowser = 'Safari';
var version = navigator.appVersion.split('Version/')[1].split(' ')[0].split('.')[0];
if (version<11) { // ios <11
return testLocalStorage();
} else { // ios >11
var isPrivate = false;
try {
window.openDatabase(null, null, null, null);
} catch (_) {
isPrivate = true;
};
if(isPrivate){
return on()
} else {
return off()
};
};
}
// IE10+ & Edge
if(is_explorer){
currBrowser = 'Internet Explorer';
if (!window.indexedDB) {
return on();
} else {
return off();
};
}
// others
return off();
}
isPrivateMode();
<p id="browser"></p>
<p id="browserMode"></p>
如果有人可以找到UC Mobile的任何解决方案,请提供帮助
我已经使用IndexedDB,Localstorage,Cookie进行了检查,但是它们都在UC浏览器移动专用模式下工作。