在新的iOS 11 Safari和MacOS High Sierra Safari上,查看window.localStorage.setItem('test', 1);
(请参阅 https://stackoverflow.com/a/17741714/1330341(是否引发错误的技巧不再有效,因为它不再抛出错误,并且它还正确设置了localStorage项。有没有人想出任何其他方法来检查新版本Safari中的隐私浏览模式?
实际上还没有尝试过,但从阅读Apple的文档来看:
https://support.apple.com/kb/ph21413?locale=en_US
它列出了私有模式浏览的各种特征(~snip(:
使用无痕浏览窗口时:
-
窗口中的每个选项卡都与其他选项卡隔离,因此网站 在一个标签页中查看无法跟踪您在其他标签页中的浏览情况。
-
Safari 浏览器不会记住您访问的网页或自动填充功能 信息。
-
Safari 浏览器不会将您打开的网页储存在 iCloud 中,因此它们不会 当您从其他设备查看所有打开的标签页时显示。
-
当您使用时,您最近的搜索不会包含在结果列表中 智能搜索字段。
-
您下载的项目不包括在下载列表中。(项目 请保留在计算机上。
-
如果您使用"切换",则"无痕浏览"窗口不会传递给您的 iOS 设备或其他 Mac 电脑。
-
Safari 浏览器不记得您的 Cookie 或其他网站所做的更改 数据。Safari 还会询问提供这些网站的网站和其他网站。 内容(包括广告商(不跟踪您的 浏览,尽管由网站来尊重此请求。
-
支持无痕浏览的插件停止存储 Cookie 和其他 跟踪信息。
从上面,我特别发现有趣的是,Safari特别要求网站"不跟踪"浏览。这可能是一种要查找的机制,以确定是否使用隐私浏览。
有关示例,请参阅此答案:
在 asp.net mvc 中实现"不跟踪">
同样,尚未测试并且不确定它是否有效,但如果不是,该列表将提供其他潜在选项。呵呵。
我在这里找到了一个解决方案:
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');
希望对:)有所帮助
引自苹果网站。 https://support.apple.com/kb/ph21413?locale=en_US
网站无法修改存储在您设备上的信息,因此服务 通常在此类网站上可用可能会有所不同,直到您转向 关闭无痕浏览
因此,存储一个测试变量,更改其值,然后读取测试变量。 如果您遇到异常,找不到变量,值未更改或返回空值/未定义值,则它们很可能处于私有模式。
或者,在隐私浏览中,您无法访问存储的搜索历史记录。因此,在启动时重定向到您网站中的新页面,然后测试您是否有任何以前的历史记录。如果没有,并且您获得"请勿跟踪"的事实很可能意味着您在 safari 上处于私人模式。
请注意,我还没有测试过这个。这是基于苹果在上述链接中提供的信息。
我意识到的是 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 但已满的浏览器上尝试此方法,您仍然会收到"超出配额"错误。 在私有模式下,本地存储的长度始终为 0。
希望这有帮助!