如何在iOS 11 Mobile Safari或MacOS High Sierra Safari中检测隐私浏览?

时间:2017-08-16 19:04:13

标签: safari mobile-safari ios11 macos-high-sierra

在新的iOS 11 Safari和MacOS High Sierra Safari上,查看window.localStorage.setItem('test', 1);(请参阅https://stackoverflow.com/a/17741714/1330341)引发错误的技巧不再有效,因为它不再引发错误,还可以正确设置localStorage项。有没有人想出任何其他方法来检查新版Safari中的隐私浏览模式?

4 个答案:

答案 0 :(得分:1)

没有真正尝试过,但是从阅读Apple的文档:

https://support.apple.com/kb/ph21413?locale=en_US

列出了私人模式浏览的各种特征(~snip):

使用私人浏览窗口时

  • 窗口中的每个标签都与其他标签隔离,因此网站就是您 一个标签中的视图无法跟踪您在其他标签中的浏览情况。

  • Safari不记得您访问的网页或您的自动填充功能 信息。

  • Safari不会将您的开放网页存储在iCloud中,因此它们不会 当您从其他设备查看所有打开的标签时显示。

  • 使用时,您最近的搜索不会包含在结果列表中 智能搜索字段。

  • 下载的项目不包含在下载列表中。 (这几项 留在你的电脑上。)

  • 如果您使用Handoff,则私人浏览窗口不会传递给您 iOS设备或其他Mac计算机。

  • Safari不记得您的Cookie或其他网站的更改 数据。 Safari还会询问提供这些网站的网站和其他人 内容(包括广告商)不要跟踪您的内容 浏览,虽然由网站来尊重此请求。

  • 支持私密浏览的插件会停止存储Cookie等 跟踪信息。

从上面,我发现有趣的是Safari特别要求网站“不跟踪”浏览。这可能是一种寻找机制,以确定是否使用隐私浏览。

请参阅此答案以获取示例:

Implementing Do not track in asp.net mvc

同样,没有测试并且不确定它是否可行,但如果没有,则列表提供其他可能的选项。 HTH。

答案 1 :(得分:1)

我在这里找到了解决方案:

https://gist.github.com/cou929/7973956#gistcomment-2272103

var isPrivate = false;
try {
   window.openDatabase(null, null, null, null);
} catch (_) {
   isPrivate = true;
}
alert((isPrivate ? 'You\'re' : 'You aren\'t')  + ' in private browsing mode');

希望有所帮助:)

答案 2 :(得分:0)

来自苹果网站的引用。 https://support.apple.com/kb/ph21413?locale=en_US

  

网站无法修改存储在您设备上的信息,因此服务也是如此   通常在这些网站上可用的工作可能会有所不同   关闭私人浏览

因此,存储测试变量,更改其值,然后读取测试变量。 如果您遇到异常,无法找到变量,值没有更改,或者您返回null / undefined值,则它们很可能处于私有模式。

或者,在隐私浏览中,您无法访问存储的搜索历史记录。因此,在启动时重定向到您网站中的新页面,然后测试您是否有任何以前的历史记录。如果没有,而且您最不可能获得“不跟踪”的事实意味着您在徒步旅行中处于私人模式。

请注意,我没有测试过这个。这是基于Apple在上述链接中提供的信息。

答案 3 :(得分:-1)

我意识到的事情是Safari抛出一个超过配额的#34;私人模式中的错误。所以这就是我做的!

isPrivateMode: function () {
  if (localStorage.length === 0) {
    try {
      localStorage.setItem('isLocalStorageAvaialble', 'That is being tested!');
      localStorage.removeItem('isLocalStorageAvaialble');
      return false;
    } catch (e) {
      return true;
    }
  }
}

检查localStorage的长度非常重要,因为如果您在支持localStorage但已满的浏览器上尝试此方法,您仍然可以获得"超出配额"错误。 在私有模式下,localStorage的长度始终为0.

希望这有帮助!