Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

Tracking of incognito/privat browsing

Avatar

Level 2

Hi! 

Any insights or recommendations on how to track if a visitor uses incognito browsing when visiting a website? 

There are several ways to identify if the visitor ID was previously unseen (i.e. Visit Number = 1), but this does not infer the user using incognito browsing mode.

Ideally, an s.prop-value or an Omniture/Adobe Analytics plugin would be able to detect the browser mode, so a distinction between 'standard' and 'incognito'/'in-private' can be made.

Any help would be much appreciated 🙂 

Martin

1 Accepted Solution

Avatar

Correct answer by
Level 2

Actually, I've found a workaround that works for most major browsers except IE. I've been running some tests and not seen any misdetection. 

The javascript I'm using is this - but it might have some holes I'm missing? If you're aware of this, please let me know 🙂 

Script: 

// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';

// Safari 3.0+ "[object HTMLElementConstructor]" 
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;

// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;

// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;

// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;

if (!isEdge && !isIE) {
    new Promise(function (resolve) {
    var db,
    on = function(){ resolve(true) },
    off = function(){ resolve(false) },
    tryls = function tryls() {
        try {
            localStorage.length ? off() : (localStorage.x = 1, localStorage.removeItem("x"), off());
        } catch (e) {
            // Safari only enables cookie in private mode
            // if cookie is disabled then all client side storage is disabled
            // if all client side storage is disabled, then there is no point
            // in using private mode
            navigator.cookieEnabled ? on() : off();
        }
    }

    // Blink (chrome & opera)
    window.webkitRequestFileSystem ? webkitRequestFileSystem(0, 0, off, on)
    // FF
    : "MozAppearance" in document.documentElement.style ? (db = indexedDB.open("test"), db.onerror = on, db.onsuccess = off)
    // Safari
    : /constructor/i.test(window.HTMLElement) ? tryls()
    // IE10+ & edge
    : !window.indexedDB && (window.PointerEvent || window.MSPointerEvent) ? on()
    // Rest
    : off();
}).then(function (isPrivateMode) {
    if (isPrivateMode) {
    b.privateBrowsing = "Yes"
    }
});
}

View solution in original post

1 Reply

Avatar

Employee Advisor

Hi Martin,

Unfortunately, this is not possible due to the way that browsers completely clear all cache, cookies, and history when accessing Incognito/Privacy Mode. Other than those three items being cleared, there's no other way to identify that a user is running their browser in these modes. Here's some more information on why this is not possible: http://stackoverflow.com/a/22623958

Avatar

Level 1
Hi Eric, any update on this? Running into this issue more often now. Would love to hear if Adobe has a solution now. Thx.

Avatar

Correct answer by
Level 2

Actually, I've found a workaround that works for most major browsers except IE. I've been running some tests and not seen any misdetection. 

The javascript I'm using is this - but it might have some holes I'm missing? If you're aware of this, please let me know 🙂 

Script: 

// Opera 8.0+
var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

// Firefox 1.0+
var isFirefox = typeof InstallTrigger !== 'undefined';

// Safari 3.0+ "[object HTMLElementConstructor]" 
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0 || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

// Internet Explorer 6-11
var isIE = /*@cc_on!@*/false || !!document.documentMode;

// Edge 20+
var isEdge = !isIE && !!window.StyleMedia;

// Chrome 1+
var isChrome = !!window.chrome && !!window.chrome.webstore;

// Blink engine detection
var isBlink = (isChrome || isOpera) && !!window.CSS;

if (!isEdge && !isIE) {
    new Promise(function (resolve) {
    var db,
    on = function(){ resolve(true) },
    off = function(){ resolve(false) },
    tryls = function tryls() {
        try {
            localStorage.length ? off() : (localStorage.x = 1, localStorage.removeItem("x"), off());
        } catch (e) {
            // Safari only enables cookie in private mode
            // if cookie is disabled then all client side storage is disabled
            // if all client side storage is disabled, then there is no point
            // in using private mode
            navigator.cookieEnabled ? on() : off();
        }
    }

    // Blink (chrome & opera)
    window.webkitRequestFileSystem ? webkitRequestFileSystem(0, 0, off, on)
    // FF
    : "MozAppearance" in document.documentElement.style ? (db = indexedDB.open("test"), db.onerror = on, db.onsuccess = off)
    // Safari
    : /constructor/i.test(window.HTMLElement) ? tryls()
    // IE10+ & edge
    : !window.indexedDB && (window.PointerEvent || window.MSPointerEvent) ? on()
    // Rest
    : off();
}).then(function (isPrivateMode) {
    if (isPrivateMode) {
    b.privateBrowsing = "Yes"
    }
});
}