javascript - 检测私密浏览 - Safari 问题

标签 javascript jquery safari

我正在尝试检测用户是否正在使用私有(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
})

https://jsfiddle.net/ndyL5mxf/

最佳答案

我为任何可能遇到的人找到了解决方案。私有(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/

相关文章:

macos - Safari中的"New Window"键盘快捷键

javascript - 使用 Javascript 生成 HTML,然后用 Angular js 解释它

javascript - 如何将 cleave.js 与 Vue 中的元素结合使用?

javascript - 排序后如何替换之前的一组元素

jQuery - 系列之外的 HighCharts 标签(条形图)

html - 十六进制颜色在 Mac 上的 Chrome 和 Safari 之间显示不同

javascript - Jquery - 弹出窗口开始......如何做剩下的

javascript - 如何打开包含浏览器信息的页面?

jQuery 帮助我的函数中的逻辑检测复选框点击

html - getContext ('2d' ) 在 Safari 10 中返回 null