Предотвратить внедрение сценария контента при активации приватного просмотра?

У меня есть сценарий содержимого, который я хотел бы предотвратить от внедрения при включенном приватном просмотре. Я использую последнюю версию надстройки SDK для Firefox (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'), но я не думаю, что есть способ отключить pagemods. Я, вероятно, мог бы не использовать сценарий контента, если включен режим приватного просмотра, но это похоже на взлом, который может привести к проблемам безопасности в будущем.

Как правильно это сделать?


person David Tuite    schedule 24.09.2012    source источник


Ответы (1)


Существует метод 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.

person ZER0    schedule 24.09.2012
comment
Я использую contentStyle и contentStyleFile для внедрения css, когда я вызываю метод destroy, он немедленно восстанавливает исходный css на веб-странице, но когда я вызываю PageMod(options), ничего не происходит, пока я не перезагружу страницу!!! есть ли способ запустить скрипт контента без перезагрузки страницы? - person razz; 08.05.2014
comment
@razzak, вам, вероятно, понадобится attachTo со значением ['existing', 'top'] или подобным. - person ZER0; 12.05.2014
comment
да, я понял это несколько дней назад, existing было волшебным словом. - person razz; 13.05.2014