我有一个weird我的插件中的错误,
插件本身需要添加特定域的请求头参数,
一切正常,但错误是,观察者 http-on-modify-request 在开始时不会被调用,只有当我重新加载页面时,它才会工作。
I mean:
- 我访问 mysite.com/ -没有修改标题,
- 我重新加载页面 - 标题已修改
- 再次重新加载 - 标头已修改
- mysite.com/ 的新标签 -没有修改标题
- 重新加载选项卡 - 标题已修改
我的代码,我正在使用插件 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。
currentUri
on browser 是当前在选项卡中加载的 Uri。在“http-on-modify-request”通知时间,请求还没有发送到服务器,因此如果是新选项卡,浏览器没有任何currentUri
。当您就地刷新选项卡时,它会使用当前页面的 uri,并且似乎 works.
试试这个:
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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)