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
  }
});

pageMode アタッチメントはインジェクションごとに評価されないため、すべてをラップする if ステートメントは機能しません。プライベート ブラウジングに出入りしても再評価は行われません。

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

イベントを聞くことはできましたpb.on('start')が、pagemod のアタッチを解除する方法はないと思います。プライベート ブラウジング モードが有効になっている場合は、おそらくコンテンツ スクリプトを操作しないこともできますが、これはセキュリティ上の懸念につながる可能性のあるハックのようです。

これを行う正しい方法は何ですか?

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 に答える