2017-07-05 22 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