如何在私有模式下编写自动关闭的Firefox附加组件?

时间:2014-05-06 04:18:30

标签: javascript firefox firefox-addon

我已经编写了一个可用的Firefox插件。当浏览器处于私有模式时,我希望这个附加组件能够自我禁用。根据{{​​3}}的文档,我已经在我的插件周围构建了这个包装器:

const {Cu} = require("chrome");
Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");

// This plugin should not activate in a private browsing session.
if (!PrivateBrowsingUtils.isWindowPrivate(window)) {
  // Add-on code goes here. includes things like:
  var button = buttons.ActionButton(...);
  tabs.on('ready', ...);
  tabs.on('activate', ...);
}

麻烦的是,我收到错误,"消息:ReferenceError:窗口未定义"在检查" isWindowPrivate"。

的行中

还有其他方法我应该访问此属性或我需要包含的其他位吗?这是Firefox 29+的ActionButton插件。也许界面改变了?

3 个答案:

答案 0 :(得分:2)

默认情况下,附加SDK扩展程序选择退出隐私浏览。这意味着您不必采取任何额外步骤,SDK根本不允许您的代码干扰私人浏览窗口。其中包括uiActionButton组件。

window未定义,因为main.js在无窗口环境中运行。如果需要,您可以获得它,但在这种情况下您不需要它。

答案 1 :(得分:0)

确定用户当前是否处于隐私浏览模式很简单。只需检查privateBrowsingEnabled服务上nsIPrivateBrowsingService属性的值即可。

var pbs = Components.classes["@mozilla.org/privatebrowsing;1"]
                    .getService(Components.interfaces.nsIPrivateBrowsingService);
var inPrivateBrowsingMode = pbs.privateBrowsingEnabled;

if (!inPrivateBrowsingMode) {
  /* save private information */
}

您可以在here

中找到与私密浏览模式相关的更多编码示例

答案 2 :(得分:0)

在Add-on SDK中导入模块有一个怪癖,您必须明确导入符号:

var {PrivateBrowsingUtils} = Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");

除了您的代码似乎正确