我正在尝试检测用户是否正在使用私有(private)浏览器查看网站。我有以下代码/ fiddle ,适用于 Chrome 和 Firefox,但不适用于 Safari。谁能看出 Safari 的问题是什么?预先感谢您。
new Promise(resolve => {
let db,
on = () => alert('yes'),
off = () => alert('no'),
tryls = () => {
try {
localStorage.length ? off() : (localStorage.x = 1, localStorage.removeItem("x"), off())
} catch (e) {
on()
}
}
// Blink
window.webkitRequestFileSystem ?
webkitRequestFileSystem(window.TEMPORARY, 1, 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(enabled => {
document.body.innerHTML = enabled
})
最佳答案
我为任何可能遇到的人找到了解决方案。私有(private)模式下的 Safari 不处理本地存储,因此下面的代码会测试是否有本地存储,如果没有,则执行某些操作。解决了我的问题。
var storageTestKey = 'test';
var storage = window.sessionStorage;
try {
storage.setItem(storageTestKey, 'test');
storage.removeItem(storageTestKey);
} catch (e) {
if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {
console.log('private widow')
} else {
console.log('not private')
}
}
关于javascript - 检测私密浏览 - Safari 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44937489/