您可以通过脚本确定Chrome是否处于隐身模式吗?

是否可以通过脚本确定Google Chrome是否处于隐身模式?

编辑: 我其实意思是可以通过用户脚本,但答案假设JavaScript正在运行在网页上。 关于用户脚本,我在这里重新提出了这个问题。

是。 FileSystem API在隐身模式下被禁用。 请检查http://jsfiddle.net/w49x9f1a/ ,并且不处于隐身模式。

示例代码:

 var fs = window.RequestFileSystem || window.webkitRequestFileSystem; if (!fs) { console.log("check failed?"); } else { fs(window.TEMPORARY, 100, console.log.bind(console, "not in incognito mode"), console.log.bind(console, "incognito mode")); } 

一种方法是访问唯一的URL,然后检查链接到该URL的链接是否被视为由CSS访问。

您可以在“检测隐身”中看到这个例子(死链接)

由同一作者的研究论文来取代上面的检测隐身链接

main.html添加一个iframe,

  <iframe id='testFrame' name='testFrame' onload='setUniqueSource(this)' src='' style="width:0; height:0; visibility:hidden;"></iframe> 

,以及一些JavaScript代码:

 function checkResult() { var a = frames[0].document.getElementById('test'); if (!a) return; var color; if (a.currentStyle) { color = a.currentStyle.color; } else { color = frames[0].getComputedStyle(a, '').color; } var visited = (color == 'rgb(51, 102, 160)' || color == '#3366a0'); alert('mode is ' + (visited ? 'NOT Private' : 'Private')); } function setUniqueSource(frame) { frame.src = "test.html?" + Math.random(); frame.onload = ''; } 

然后在test.html中加载到iFrame中:

 <style> a:link { color: #336699; } a:visited { color: #3366A0; } </style> <script> setTimeout(function() { var a = document.createElement('a'); a.href = location; a.id = 'test'; document.body.appendChild(a); parent.checkResult(); }, 100); </script> 

注意:从文件系统中尝试这可以使Chrome哭“不安全的Javascript”。 然而,它将从一个networking服务器提供服务。

你可以在JavaScript中看到JHurrah的答案 。 除了不突出显示链接外,所有隐身模式都不会保存浏览历史logging和Cookie。 从谷歌帮助页面 :

  • 您在隐身模式下打开的网页和下载的文件不logging在您的浏览和下载历史logging中。
  • closures您打开的所有隐身窗口后,所有新的Cookie都将被删除。

正如您在浏览网页可以看到正常浏览和隐身模式之间的差异,因此在此模式下浏览器与服务器之间没有任何通信。

您可以使用许多HTTP请求分析器之一来查看浏览器发送给服务器的内容, 如此处所示 。 比较正常会话和隐身之间的标题,你会看到没有区别。

如果您正在开发扩展程序,则可以使用选项卡API来确定窗口/选项卡是否隐身。

更多信息可以在code.google.com上find。

如果你只是在网页上工作,这不是一件容易的事情,它的devise就是这样的。 但是,我注意到,在incongnito中,所有试图打开数据库(window.database)都会失败,这是因为在隐身模式下,不允许在用户机器上留下任何数据痕迹。

我没有testing过,但我怀疑所有的调用localStorage也失败了。

隐身模式的文档明确指出,网站不会有不同的performance。 我相信这意味着答案是否定的。

基于Alok's Answer的快速复制粘贴function(注意:这是asynchronous的)

 function ifIncognito(incog,func){ var fs = window.RequestFileSystem || window.webkitRequestFileSystem; if (!fs) console.log("checking incognito failed"); else { if(incog) fs(window.TEMPORARY, 100, ()=>{}, func); else fs(window.TEMPORARY, 100, func, ()=>{}); } } 

用法:

 ifIncognito(true, ()=>{ alert('in incognito') }); // or ifIncognito(false, ()=>{ alert('not in incognito') });