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