Skip to content

Instantly share code, notes, and snippets.

@lukasotocerny
Forked from jherax/is-private-mode.js
Created December 28, 2017 07:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukasotocerny/936321e1d90e6782d6e0d7de84fbda16 to your computer and use it in GitHub Desktop.
Save lukasotocerny/936321e1d90e6782d6e0d7de84fbda16 to your computer and use it in GitHub Desktop.
Detect if a browser is in Private Browsing mode
/**
* Detect if the browser is running in Private Browsing mode
*
* @export
* @returns {Promise}
*/
export default function isPrivateMode() {
return new Promise((resolve) => {
const on = () => resolve(true); // is in private mode
const off = () => resolve(false); // not private mode
const testLocalStorage = () => {
try {
if (localStorage.length) off();
else {
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();
}
};
// Chrome & Opera
if (window.webkitRequestFileSystem) {
return void window.webkitRequestFileSystem(0, 0, off, on);
}
// Firefox
if ('MozAppearance' in document.documentElement.style) {
const db = indexedDB.open('test');
db.onerror = on;
db.onsuccess = off;
return void 0;
}
// Safari
if (/constructor/i.test(window.HTMLElement)) {
return testLocalStorage();
}
// IE10+ & Edge
if (!window.indexedDB && (window.PointerEvent || window.MSPointerEvent)) {
return on();
}
// others
return off();
});
}
isPrivateMode().then((isPrivate) => {
console.log('Is in private mode: ', isPrivate);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment