我們可以這樣做,我重寫了一個新的nsiHttpChannel
,這樣做有點複雜,但幸運的是插件https-everywhere
實現這個強制一個https連接。
https-everywhere
的源代碼可here
最需要這個代碼是在文件
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();
該代碼將取代請求不重定向。
雖然我已經很好地測試了上面的代碼,但我不確定它的實現。據我所知,它複製了所請求頻道的所有屬性,並將它們設置爲要覆蓋的頻道。之後以某種方式,原始請求所請求的輸出將使用新通道提供。
P.S.我曾見過一個SO帖子,其中提出了這種方法。
的Greasemonkey和JavaScript的Greasemonkey還支持跨域AJAX調用。 – Anders
@Anders - 或許我不清楚我的問題。我想攔截所有**網絡請求,因爲我需要將所有請求重寫爲相關網址。我的理解是,例如,如果一個頁面加載一個JS文件,然後進行Ajax調用,該調用不能被Greasemonkey捕獲 - 這就是爲什麼我沒有考慮它。我錯了嗎? –
問題http:// stackoverflow。com/questions/3122854 /如何替換一個JavaScript文件請求內容從另一個文件在ff似乎回答同樣的問題... –