如何在firefox插件上更改脚本位置?

And*_*aev 2 javascript browser firefox firefox-addon google-chrome-extension

制作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"]);
Run Code Online (Sandbox Code Playgroud)

我知道firefox中的nsIContentPolicy,但我不明白如何使用它.

所有的意见,建议和帮助将不胜感激

回答

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

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

Wla*_*ant 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);
Run Code Online (Sandbox Code Playgroud)

供参考:Services.jsm,XPCOMUtils.jsm,观察者通知,nsIHttpChannel,nsIURI