2

制作 Firefox 插件的最简单方法是什么,它重复了这个 chrome 功能:

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,但我不明白如何使用它。

我们将不胜感激所有意见、建议和帮助

回答

我已经确定了无重启扩展的问题。
要阻止内容,我们可以使用 Wladimir 所说的 nsIContentPolicy。我们还可以使用windowListener (aWindow.gBrowser) 将脚本注入页面。

例如,这种做法非常有效:https ://github.com/jvillalobos/AMO-Admin-Assistant/blob/master/src/bootstrap.js

4

1 回答 1

5

我认为现在没有重大黑客攻击就无法做到这一点。这是错误 765934redirectTo() method的主题,它将向nsIHttpChannel界面添加一个。一旦实现,这样的代码应该可以工作:

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.jsm , XPCOMUtils.jsm ,观察者通知, nsIHttpChannel , nsIURI

于 2012-11-09T09:51:48.670 回答