ios - 如何检测 iOS 11+ Safari 以及旧版本 Safari 中的隐私浏览?

标签 ios browser safari ios11 incognito-mode

我需要检测用户在旧版本的 Safari 以及 IOS 11 上的 Safari 中是否处于私密模式。是否有一个测试可以涵盖这两种模式?

更新:这是一支笔,尝试根据下面的 jeprubio 解决方案将存储和 openDatabase try-catch block 结合起来

var isPrivate = false;

// Check private in iOS < 11
var storage = window.sessionStorage;
try {
  console.log('first try for storage')
    storage.setItem("someKeyHere", "test");
    storage.removeItem("someKeyHere");
} catch (e) {
  console.log('first catch')
    if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {
        isPrivate = true;
   } 
}

// Check private in iOS 11: https://gist.github.com/cou929/7973956#gistcomment-2272103
try {
  console.log('second try for opendb');
   window.openDatabase(null, null, null, null);
} catch (e) {
  console.log('second catch');
   isPrivate = true;
}

console.log('isPrivate: ' + isPrivate)

alert((isPrivate ? 'You are' : 'You are not')  + ' in private browsing mode');

https://codepen.io/anon/pen/zpMZjp

在 Safari 新版本 (11+) 正常浏览器模式中,在控制台上的 openDatabase 测试中不会出错,但会进入第二个捕获并且 isPrivate 设置为 true。因此,在 Safari 11+ 中,非隐私模式也会被检测为隐私模式。

最佳答案

试试这个:

var isPrivate = false;

// Check private in iOS < 11
var storage = window.sessionStorage;
try {
    storage.setItem("someKeyHere", "test");
    storage.removeItem("someKeyHere");
} catch (e) {
    if (e.code === DOMException.QUOTA_EXCEEDED_ERR && storage.length === 0) {
        isPrivate = true;
   } 
}

// Check private in iOS 11: https://gist.github.com/cou929/7973956#gistcomment-2272103
try {
   window.openDatabase(null, null, null, null);
} catch (_) {
   isPrivate = true;
}

alert((isPrivate ? 'You\'re' : 'You aren\'t')  + ' in private browsing mode');

关于ios - 如何检测 iOS 11+ Safari 以及旧版本 Safari 中的隐私浏览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48169810/

相关文章:

java - 从 Safari (IOS) 访问文件系统

ios - 在 swift 4 中设置和获取数组时发生了奇怪的事情

browser - 处于非事件选项卡时闪烁代码 'pauses'?

javascript - iOS 上的 Safari 中的视差滚动

python - 在Python中浏览/解析html页面

javascript - 关闭浏览器选项卡时执行操作(Javascript)

jQuery fadeTo 和 fadeIn 除了 JSFiddle 之外在任何地方都不起作用

safari - 在 contentEditable div 上禁用 Mac OS X Lion Safari 的自动更正?

ios - 用于 GoogleMaps 的 ionic 构建 ios - 命令的错误代码 65

ios - 从 URL 显示 mp3 的波形