2

このクロム機能を繰り返すFirefoxアドオンを作成する最も簡単な方法は何ですか?

chrome.webRequest.onBeforeRequest.addListener(
  function(info) {
    if(info.url.indexOf("notifier") + 1){
        return {redirectUrl: "https://domain.null/1.js"};
    }

  },
  {
    urls: [
      "*://domain2.null/*"
    ],
    types: ["script"]
  }, ["blocking"]);

FirefoxのnsIContentPolicyについては知っていますが、使用方法がわかりません。

すべての意見、アドバイス、およびヘルプは高く評価されます

答え

リスタートレス拡張機能の問題を特定しました。
ウラジミールが言ったように、コンテンツをブロックするためにnsIContentPolicyを使用することができます。また、 windowListener(aWindow.gBrowser)を使用してページにスクリプトを挿入することもできます。

たとえば、この方法は完全に機能します:https ://github.com/jvillalobos/AMO-Admin-Assistant/blob/master/src/bootstrap.js

4

1 に答える 1

5

今のところ、これは大きなハックなしではできないと思います。これは、インターフェースにを追加するバグ765934の対象です。実装すると、次のようなコードが機能するはずです。redirectTo() methodnsIHttpChannel

const Ci = Components.interfaces;
const Cu = Components.utils;

Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");

var observer = {
  QueryInterface: XPCOMUtils.generateQI([
    Ci.nsIObserver,
    Ci.nsISupportsWeakReference
  ]),

  observe: function(subject, topic, data)
  {
    if (topic == "http-on-modify-request" &&
        subject instanceof Ci.nsIHttpChannel)
    {
      var uri = subject.URI;
      if (uri.host == "domain2.null" && /\.js(\?|$)/.test(uri.path))
      {
        var redirectUri = Services.io.newURI("https://domain.null/1.js",
                                             null, null);
        subject.redirectTo(redirectUri);
      }
    }
  }
};

Services.obs.addObserver(observer, "http-on-modify-request", true);

参考:Services.jsmXPCOMUtils.jsmオブザーバー通知nsIHttpChannelnsIURI

于 2012-11-09T09:51:48.670 に答える