为UC浏览器检测Private Browing

时间:2018-09-25 14:57:44

标签: javascript html cross-browser

我正在编写一个功能来检测用户的浏览器并确定它是否为私有。

我能够检测所有浏览器,例如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浏览器移动专用模式下工作。

0 个答案:

没有答案