2017-07-05 103 views
1

我試圖檢測用戶是否在私人瀏覽器中查看網站。我有下面的代碼/小提琴,適用於Chrome和Firefox,但不適用於Safari。任何人都可以看到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/

回答

0

我發現任何一個解決方案,可能會遇到。處於私人模式的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') 
    } 
} 
+4

這在Safari 11.0中不起作用了 – lustoykov