制作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 ,但我不明白如何使用它。
所有意见,建议和帮助将不胜感激
我已经确定了无重启扩展的问题。
阻止内容我们可以使用nsIContentPolicy作为Wladimir说。我们还可以使用 windowListener (aWindow.gBrowser)将脚本注入页面。
例如,这种做法非常有效:https://github.com/jvillalobos/AMO-Admin-Assistant/blob/master/src/bootstrap.js
答案 0 :(得分:5)
我认为现在没有重大黑客可以做到这一点。这是bug 765934的主题,它会向nsIHttpChannel
interface添加redirectTo() method
。一旦实现,这样的代码应该可以工作:
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,observer notifications,nsIHttpChannel,nsIURI