さて、ここで、アドオンの一部に関する別の問題で再び戻ってきました.
オブザーバーを使用して、javascript を介して呼び出された値を変更しています。
var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(this, "document-element-inserted", false);
これは、'document-element-inserted' を観察することで行っています。
ドキュメントのルート要素が作成された直後、スクリプトを実行する前に送信されます。(ソース)
呼び出されると、アドオンはいくつかのドキュメント/ナビゲーター/スクリーンの値を変更して、navigator.X の値をオーバーライドすることでフィンガープリントを減らします。
Object.defineProperty(XPCNativeWrapper.unwrap(navigator), "plugins", {
value: "",
});
この場合、たとえばプラグイン リストで、プラグインがまったくインストールされていないかのように表示されます。
これまでのところ、これは私の開発環境/jpm実行でうまく機能しています。しかし、実際の xpi を作成したので、何も起こりません。コードは引き続き呼び出されます。jSTracking 関数でいくつかのコンソール出力を使用しましたが、それらはすべてブラウザ コンソールに表示されました。ただし、変更されたと思われる値は元の値のままです。
jpm run を使用したときに表示されないエラーは 2 つだけです。
[例外...「コンポーネントがエラー コードを返しました: 0x80004005 (NS_ERROR_FAILURE) [nsIURI.hostPort]」 /< :: line 667" data: no] (unknown)
インストール中に2回スローされます。
コンテンツ プロセスでの nsIFile の使用は非推奨です。Content.js:25:17
コンテンツ プロセスでの nsIFile の使用は非推奨です。NetUtil.jsm:335:12
私のスクリプトとは関係ありませんが、時々現れるもう1つのものです。
私を最も混乱させているのは、なぜ Object.defineProperty は jpm run では機能するのに、xpi では機能しないのですか? 常に機能させるには、何を変更する必要がありますか?
プロジェクト全体は、私の Github リポジトリにあります。
オブザーバーの登録は、pp.js の 452 行目で行われます。
観察機能は436-446行にあります
jsTracking 関数は 193 行目で始まり、433 行目で終わります
引用されたプラグインの例は、399 ~ 403 行にあります。
どんな助けにも感謝します、ありがとう!