2013-07-25 87 views
1

Iam構建我想捕獲窗口事件的擴展。我有這樣的代碼: .............................................Firefox中的窗口觀察器

function MyWindowObserver() { 
    this.observe=function(aSubject, aTopic, aData) { 
     if(aSubject.innerWidth!=1536) 
      aSubject.close(); 
    } 
} 

function myObserver(){} 

myObserver.prototype = { 
    observe: function(subject, topic, data) { 

}, 
    register: function() { 
     var observerService = Components.classes["@mozilla.org/observer-service;1"] 
      .getService(Components.interfaces.nsIObserverService); 
     observerService.addObserver(this, "http-on-modify-request", false); 

    }, 
    unregister: function() { 
     var observerService = Components.classes["@mozilla.org/observer-service;1"] 
      .getService(Components.interfaces.nsIObserverService); 
     observerService.removeObserver(this, "http-on-modify-request"); 
    } 
} 

function installButton() 
{ 
    var id = "button_cs"; 
    var toolbarId = "nav-bar"; 

    var toolbar = document.getElementById(toolbarId); 

    //add the button at the end of the navigation toolbar 
    toolbar.insertItem(id, toolbar.lastChild); 
    toolbar.setAttribute("currentset", toolbar.currentSet); 
    document.persist(toolbar.id, "currentset"); 

    //if the navigation toolbar is hidden, 
    //show it, so the user can see your button 
    toolbar.collapsed = false; 
} 

function firstRun(extensions) { 
    var extension = extensions.get("[email protected]"); 

    if (extension.firstRun) { 
     installButton(); 
    } 
} 

var myExtension={ 

    Observers:null, 
    prefs:null, 
    clock:null, 
    prevwidth:null, 
    prevon:null, 
    BrosNumber:null, 

    init:function(){ 

     if (Application.extensions) 
      firstRun(Application.extensions); 
     else 
      Application.getExtensions(firstRun); 

     this.prefs = Components.classes["@mozilla.org/preferences-service;1"] 
      .getService(Components.interfaces.nsIPrefService).getBranch("accessibility."); 

     this.Observers = new myObserver(); 

     this.Observers.register(); 
    } 
}; 

myExtension.init(); 

window.addEventListener('load', function(win) { 
    var observerService = Components.classes["@mozilla.org/observer-service;1"] 
     .getService(Components.interfaces.nsIObserverService); 
    observerService.addObserver(new MyWindowObserver(), "toplevel-window-ready", false); 
},false); 

我究竟做錯了什麼? aSubject不是已打開的最後一個窗口?

任何想法?

+0

你在那裏有一個語法錯誤:在register:function(){'你不應該有'},'那裏。 –

+0

這不是問題 – Tony

+0

窗口事件是什麼意思?你只是想看'http-on-modify-request'和'頂層窗口準備好'嗎? – Noitidart

回答

0

這款手錶http-on-modify-requesttoplevel-window-ready

觀察者不是基於每個窗口。您只需在全球註冊。

var{interfaces: Ci, utils: Cu} = Components; 
Cu.import('resource://gre/modules/Services.jsm'); 

var observers = { 
    httpModReq: { 
     observe: function (aSubject, aTopic, aData) { 
      console.log('incoming observe httpModReq - aSubject: "' + aSubject + '" | aTopic: "' + aTopic + '" | aData: "' + aData + '"'); 
      var httpChannel, requestURL; 
      httpChannel = subject.QueryInterface(Ci.nsIHttpChannel); 
      requestURL = httpChannel.URI.spec; 

      if (requestURL.indexOf('google.com') > -1) { 
       //they are loading google 
       //httpChannel.setRequestHeader('MyCustomRequestHeader', 'hiiii', false); 
       /* 
       try { 
        var Host = httpChannel.getRequestHeader('Host'); 
       } catch (ex) { 
        //if doesnt have Host header it throws exception "NS_ERROR_NOT_AVAILABLE" 
        var Host = 'NULL'; 
       } 
       console.log('REQUEST Header "Host" = ' + Host); 
       */ 
      } 
     }, 
     register: function() { 
      Services.obs.addObserver(observer.httpModReq, 'http-on-modify-request', false); 
     }, 
     unregister: function() { 
      Services.obs.removeObserver(observer.httpModReq, 'http-on-modify-request'); 
     } 
    }, 
    topWinRdy: { 
     observe: function (aSubject, aTopic, aData) { 
      console.log('incoming observe topWinRdy - aSubject: "' + aSubject + '" | aTopic: "' + aTopic + '" | aData: "' + aData + '"'); 
     }, 
     register: function() { 
      Services.obs.addObserver(observer.topWinRdy, 'toplevel-window-ready', false); 
     }, 
     unregister: function() { 
      Services.obs.removeObserver(observer.topWinRdy, 'toplevel-window-ready'); 
     } 
    } 
}; 


//run this block to start observing 
for (var o in observers) { 
    observers[o].register(); 
} 

/*//run this block when you want to remove the observers 
for (var o in observers) { 
    observers[o].unregister(); 
} 
*/ 

您可以將其粘貼到暫存器中,並將其與設置爲瀏覽器的環境一起運行。它會正常工作。