Firefox Addon观察者http-on-modify-request无法正常工作

时间:2014-01-19 21:25:20

标签: javascript firefox http-headers firefox-addon reload

我的插件中有一个奇怪的错误, addon本身需要为特定域添加请求头参数, 一切正常,但是错误是,观察者http-on-modify-request在启动时没有被调用,只有当我重新加载页面时,它才有效。

我的意思是:

  1. 我转到mysite.com/ - 没有标题修改
  2. 我重新加载页面 - 标题模式
  3. 重新加载 - 标题模式
  4. mysite.com/上的新标签 - 未修改标题
  5. 重新加载标签 - 标头模式
  6. 我的代码,我正在使用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。

1 个答案:

答案 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);
    }
}