Благодаря Iwburk я смог сделать это.
Мы можем сделать это, переопределив nsiHttpChannel
новым, сделать это немного сложнее, но, к счастью, дополнение https-everywhere
реализует это, чтобы принудительно установить соединение https.Исходный код
https-everywhere
доступен здесь
Большая часть кода, необходимого для этого, находится в файлах
IO Util.js
ChannelReplacement.js
Мы можем работать только с вышеуказанными файлами, если у нас есть базовые переменные, такие как Cc, Ci, настроенные и функция xpcom_generateQI
определено
var httpRequestObserver =
{
observe: function(subject, topic, data) {
if (topic == "http-on-modify-request") {
var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
var requestURL = subject.URI.spec;
if(isToBeReplaced(requestURL)) {
var newURL = getURL(requestURL);
ChannelReplacement.runWhenPending(subject, function() {
var cr = new ChannelReplacement(subject, ch);
cr.replace(true,null);
cr.open();
});
}
}
},
get observerService() {
return Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
},
register: function() {
this.observerService.addObserver(this, "http-on-modify-request", false);
},
unregister: function() {
this.observerService.removeObserver(this, "http-on-modify-request");
}
};
httpRequestObserver.register();
Код заменит запрос не перенаправляет.
Хотя я достаточно хорошо протестировал приведенный выше код, я не уверен в его реализации.Насколько я могу разобрать, он копирует все атрибуты запрошенного канала и устанавливает их для канала, который будет переопределен.После чего каким-то образом вывод, запрошенный исходным запросом, предоставляется с использованием нового канала.
PS Я видел сообщение SO, в котором был предложен этот подход.