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

Posted

技术标签:

【中文标题】是否可以通过用户脚本确定 Chrome 是否处于隐身模式?【英文标题】:Is it possible to determine if Chrome is in incognito mode via a user-script? 【发布时间】:2011-02-24 09:41:15 【问题描述】:

我 asked this question before 但没有明确表示我的意思是用户脚本,而不是网页中的 javascript。所以我现在会更清楚。

是否可以通过用户脚本(基本上是在浏览器中作为扩展程序运行的脚本,而不是在网页上运行的脚本)确定 Google Chrome 是否处于隐身模式?

【问题讨论】:

你为什么想知道这个? 【参考方案1】:

检测一个窗口是否在 隐身模式,检查隐身模式 相关标签的属性 或 窗口对象。例如:

var bgPage = chrome.extension.getBackgroundPage();

function saveTabData(tab, data) 
  if (tab.incognito) 
    bgPage[tab.url] = data;       // Persist data ONLY in memory
   else 
    localStorage[tab.url] = data; // OK to store data

http://code.google.com/chrome/extensions/overview.html

【讨论】:

【参考方案2】:

如果您正在开发扩展,那么您可以使用标签 API 来确定窗口/标签是否隐身。

更多信息请访问code.google.com。

如果您只是使用网页或用户脚本,这并不容易,而且它就是这样设计的。但是,我注意到在隐身模式下打开数据库(window.database)的所有尝试都失败了,这是因为在隐身模式下,不允许在用户计算机上留下任何数据痕迹。

我尚未对其进行测试,但我怀疑对 localStorage 的所有调用也会失败。

【讨论】:

localStorage works, but the values are discarded when the private session ends。因此,这不是当前会话的有效检测方法。 当 chrome 处于 InCognito 模式时,localStorage 的行为类似于 sessionStorage。【参考方案3】:

如今,通过内容脚本很容易做到这一点。只需使用

if(chrome.extension.inIncognitoContext) 
    //you're incognito
 else 
    //you're not

【讨论】:

以上是关于是否可以通过用户脚本确定 Chrome 是否处于隐身模式?的主要内容,如果未能解决你的问题,请参考以下文章

SMTP 客户端如何确定是使用显式 SSL 还是隐式 SSL

确定用户是否在当前tty上运行图形界面

C#:是否可以从属性集中确定当前是否处于反序列化模式?

(PHP)如何检测用户的计算机/浏览器是否处于黑暗模式?

有没有办法检测浏览器窗口当前是否处于活动状态?

Chrome加载React应用程序中的“WebExtension :: executeScript:内容脚本注入VM149:1”