13

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

4

4 回答 4

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');

希望能帮助到你 :)

于 2017-12-04T08:38:57.980 回答
1

实际上并没有尝试过,但是通过阅读 Apple 的文档:

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

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

当您使用隐私浏览窗口时:

  • 窗口中的每个选项卡都与其他选项卡隔离,因此您在一个选项卡中查看的网站无法跟踪您在其他选项卡中的浏览。

  • Safari 不会记住您访问的网页或您的自动填充信息。

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

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

  • 您下载的项目不包含在下载列表中。(这些项目确实保留在您的计算机上。)

  • 如果您使用 Handoff,隐私浏览窗口不会传递到您的 iOS 设备或其他 Mac 电脑。

  • Safari 不会记住对您的 cookie 或其他网站数据所做的更改。Safari 还要求网站和为这些网站提供内容的其他人(包括广告商)不要跟踪您的浏览,尽管网站是否会满足此要求。

  • 支持隐私浏览的插件会停止存储 cookie 和其他跟踪信息。

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

有关示例,请参见此答案:

在 asp.net mvc 中实现不要跟踪

同样,还没有测试并且不确定它是否会起作用,但如果不是,该列表提供了其他潜在的选项。HTH。

于 2017-08-25T18:34:24.980 回答
0

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

网站无法修改存储在您设备上的信息,因此在您关闭隐私浏览之前,此类网站上通常可用的服务可能会有所不同

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

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

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

于 2017-08-25T19:35:16.927 回答
-1

我意识到 Safari 在私有模式下会引发“超出配额”错误。所以这就是我所做的!

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 但已满的浏览器上尝试此方法,您仍然会收到“Quota Exceeded”错误。在私有模式下,localStorage 的长度始终为 0。

希望这可以帮助!

于 2018-01-15T19:30:11.607 回答