我的插件中有一个奇怪的错误, addon本身需要为特定域添加请求头参数, 一切正常,但是错误是,观察者http-on-modify-request在启动时没有被调用,只有当我重新加载页面时,它才有效。
我的意思是:
我的代码,我正在使用addon sdk:
exports.main = function(options,callbacks) {
// Create observer
httpRequestObserver =
{
observe: function(subject, topic, data)
{
if (topic == "http-on-modify-request") {
//only identify to specific preference domain
var windowsService = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);
var uri = windowsService.getMostRecentWindow('navigator:browser').getBrowser().currentURI;
var domainloc = uri.host;
if (domainloc=="mysite.com"){
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
httpChannel.setRequestHeader("x-test", "test", false);
}
}
},
register: function()
{
var observerService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
observerService.addObserver(this, "http-on-modify-request", false);
},
unregister: function()
{
var observerService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
observerService.removeObserver(this, "http-on-modify-request");
}
};
//register observer
httpRequestObserver.register();
};
exports.onUnload = function(reason) {
httpRequestObserver.unregister();
};
请帮助我,我搜索了几个小时没有结果。 代码正在运行,但不是第一次加载页面时, 只有我重装。
目标是只在mysite.com上,始终会有x-text=test
标头请求,但仅限于mysite.com。
答案 0 :(得分:3)
currentUri
是当前在选项卡中加载的Uri。在“http-on-modify-request”通知时间,请求尚未发送到服务器,因此如果它是新选项卡,则浏览器没有任何currentUri
。当您刷新选项卡时,它会使用当前页面的uri,而貌似可以正常工作。
请改为尝试:
if (topic == "http-on-modify-request") {
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
var uri = httpChannel.URI;
var domainloc = uri.host;
//only identify to specific preference domain
if (domainloc == "mysite.com") {
httpChannel.setRequestHeader("x-test", "test", false);
}
}