Javascript Firefox加载项observer http on modify请求无法正常工作
我的插件中有一个奇怪的bug, 插件本身需要为特定域添加请求头参数, 这一切都在工作,但问题是,修改请求上的ObserverHTTP在开始时没有被调用,只有当我重新加载页面时,它才工作 我的意思是:Javascript Firefox加载项observer http on modify请求无法正常工作,javascript,firefox,http-headers,firefox-addon,reload,Javascript,Firefox,Http Headers,Firefox Addon,Reload,我的插件中有一个奇怪的bug, 插件本身需要为特定域添加请求头参数, 这一切都在工作,但问题是,修改请求上的ObserverHTTP在开始时没有被调用,只有当我重新加载页面时,它才工作 我的意思是: 我去mysite.com/-没有修改标题 我重新加载页眉模式 再次重新加载-标头已模式化 mysite.com上的新选项卡-未修改标题 “重新加载”选项卡-标题已模式化 我的代码,我正在使用插件sdk: exports.main = function(options,callbacks) { //
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上才有。currentUri
on browser是当前加载到选项卡中的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);
}
}