0

我有一个内容脚本,我想防止在启用隐私浏览时注入自身。我正在使用最新版本的 Firefox 附加 SDK (1.9)。

我正在注入这样的内容:

// lib/main.js
var pb = require('private-browsing');

pageMod.PageMod({
  include: "http://*",
  contentScriptFile: [self.data.url('jquery.min.js'),
                      self.data.url('content.js')],
  contentSriptWhen: 'start',
  onAttach: function(worker) {
    // do some stuff
  }
});

包装整个事情是一个 if 语句不起作用,因为没有为每次注入评估 pageMode 附件。进入和离开私人浏览也不会触发重新评估。

if (!pb.isActive) {
  // the code I have above.
}

我可以收听该pb.on('start')事件,但我认为没有办法取消附加页面模块。如果启用了隐私浏览模式,我可能不操作内容脚本,但这似乎是一种黑客行为,可能会导致未来的安全问题。

这样做的正确方法是什么?

4

1 回答 1

3

有一个destroy方法:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/page-mod.html#destroy%28%29

请务必注意,如果您对现有页面进行了一些更改,则必须手动删除它们。

所以,你可以有类似的东西:

const pb = require('private-browsing');
const { PageMod } = require('page-mod');

var mod = null;

var options = {
  include: "http://*",
  contentScriptFile: [self.data.url('jquery.min.js'),
                      self.data.url('content.js')],
  contentSriptWhen: 'start',
  onAttach: function(worker) {
    // do some stuff
  }
}

if (!pb.isActive)
  mod = PageMod(options);

pb.on("start", function(){
  if (mod) {
    mod.destroy();
    mod = null;
  }
})

pb.on("stop", function() {
  if (!mod) {
    mod = PageMod(options);
  }
})

没有测试,只是给你一个粗略的想法。我不确定每次创建/销毁 PageMod 是一件好事。

请注意mozilla-labs-jetpack 邮件列表上的原始帖子,将答案复制到此处以对不了解 ML 的其他人有用。

于 2012-09-24T13:20:27.047 回答