/**
* Detect browser running on private mode
* @returns {Boolean}
*/
export function isPrivateMode() {
return new Promise(function detect(resolve) {
var yes = function () {
resolve(true)
} // is in private mode
var not = function () {
resolve(false)
} // not in private mode
function detectChromeOpera() {
// https://developers.google.com/web/updates/2017/08/estimating-available-storage-space
var isChromeOpera =
/(?=.*(opera|chrome)).*/i.test(navigator.userAgent) &&
navigator.storage &&
navigator.storage.estimate
if (isChromeOpera) {
navigator.storage.estimate().then(function (data) {
return data.quota < 120000000 ? yes() : not()
})
}
return !!isChromeOpera
}
function detectFirefox() {
var isMozillaFirefox = 'MozAppearance' in document.documentElement.style
if (isMozillaFirefox) {
if (indexedDB == null) yes()
else {
var db = indexedDB.open('inPrivate')
db.onsuccess = not
db.onerror = yes
}
}
return isMozillaFirefox
}
function detectSafari() {
var isSafari = navigator.userAgent.match(/Version\/([0-9\._]+).*Safari/)
if (isSafari) {
var testLocalStorage = function () {
try {
if (localStorage.length) not()
else {
localStorage.setItem('inPrivate', '0')
localStorage.removeItem('inPrivate')
not()
}
} catch (_) {
// 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 ? yes() : not()
}
return true
}
var version = parseInt(isSafari[1], 10)
if (version < 11) return testLocalStorage()
try {
window.openDatabase(null, null, null, null)
not()
} catch (_) {
yes()
}
}
return !!isSafari
}
function detectEdgeIE10() {
var isEdgeIE10 =
!window.indexedDB && (window.PointerEvent || window.MSPointerEvent)
if (isEdgeIE10) yes()
return !!isEdgeIE10
}
// when a browser is detected, it runs tests for that browser
// and skips pointless testing for other browsers.
if (detectChromeOpera()) return
if (detectFirefox()) return
if (detectSafari()) return
if (detectEdgeIE10()) return
// default navigation mode
return not()
})
}
Source