我有一个内容脚本,我想防止在启用隐私浏览时注入自身。我使用的是最新版本的 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')
事件,但我认为没有办法取消附加页面模组。如果启用了隐私浏览模式,我可能会不操作内容脚本,但这似乎是一种黑客攻击,可能会导致未来的安全问题。
正确的方法是什么?
有一个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 的其他人有用。