我想要为符合我的模式的URL添加前缀。当我在Firefox中打开一个匹配的URL时,页面不应该正常加载,而是应该先修改URL,然后再开始加载页面。
在Mozilla Firefox Addon中,在页面开始加载之前是否可以修改URL?
我想要为符合我的模式的URL添加前缀。当我在Firefox中打开一个匹配的URL时,页面不应该正常加载,而是应该先修改URL,然后再开始加载页面。
在Mozilla Firefox Addon中,在页面开始加载之前是否可以修改URL?
subject.URI.spec
(URL)符合您的条件,则继续进行nsIHttpChannel
chrome/content/IOUtils.js
开始。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();
contentScriptWhen: "start"
然后,在完全防止文档被解析之后,您可以选择:document.URL
处理后,调用location.replace()
。