2011-03-03 6 views
2

기록을 지우려면 Firefox-Browser-Events (sessionstore-windows-restored, user-interaction-inactive, ..)를 기다리고 싶습니다. 내 확장 기능은 현재 바로 가기의 기록을 지울 수 있지만 그러한 이벤트를 수신하는 방법을 모르겠습니다. 나는 이미 observer notification에 대한 열정을 가졌지 만 나는 아무 것도 시도하지 않았다.Firefox 확장에서 지정된 Firefox 이벤트를 어떻게 볼 수 있습니까?

내 연장 코드는 지금까지 여기에 있습니다 :

(function() { 

    (window.myObj = 
    { 
     myObserver : function() 
     { 
      this.register(); 
     }, 

     init : function() 
     { 
      try { 

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

         switch (topic) { 
          case 'sessionstore-windows-restored': 
          Firebug.Console.log('sessionstore-windows-restored observed'); 
          myObj.clearHistory(); 
          break; 
          case 'user-interaction-inactive': 
          Firebug.Console.log('user-interaction-inactive'); 
          break; 
          case 'user-interaction-active': 
          Firebug.Console.log('user-interaction-active'); 
          break; 
         } 

         Firebug.Console.log('HUI :' + subject + ','+topic+','+data); 
        }, 
        register: function(){ 
         var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
         observerService.addObserver(this, "readyToClearHistory", false); 
        }, 
        unregister: function(){ 
         var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
         observerService.removeObserver(this, "readyToClearHistory"); 
        } 
       } 
      } 
      catch (e) { 
       Firebug.Console.log('MIST :' + e); 
      } 

      observer = new myObserver(); 
     }, 
     clearHistory : function(){ 
      var globalHistory = Components.classes["@mozilla.org/browser/global-history;2"].getService(Components.interfaces.nsIBrowserHistory); 
      var now = Date.now(); 

      // clear one hour 
      globalHistory.removeVisitsByTimeframe(now - 3600, now); 

      try { 
       var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService); 
       os.notifyObservers(null, "browser:purge-session-history", ""); 
      } 
      catch (e) { 

       // Clear last URL of the Open Web Location dialog 
       var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch2); 
       try { 
        prefs.clearUserPref("general.open_location.last_url"); 
       } 
       catch (e) { 
       } 
      } 
       } 
    } 
} 

일부 예제 코드가 좋은 것입니다. 이 문제를 해결하려면 무엇이 필요합니까?

답변

7

코드 부분에 nsIObserver과 관련된 문제가없는 것으로 나타났습니다. 즉, 문제가 다른 곳에서 발생했을 가능성이 있습니다. 이 완벽한 예제는 작동 :

일반적으로
var ObserverTest = { 

    register: function() { 
     var observerService = Components.classes["@mozilla.org/observer-service;1"] 
      .getService(Components.interfaces.nsIObserverService); 
     observerService.addObserver(ObserverTest, "user-interaction-active", false); 
    }, 

    observe: function(subject, topic, data) { 
     switch (topic) { 
      case 'sessionstore-windows-restored': 
       // do stuff 
       break; 
      case 'user-interaction-inactive': 
       // do stuff 
       break; 
      case 'user-interaction-active': 
       // every 5 seconds and immediately when user becomes active 
       alert("active"); 
       break; 
     } 
    }, 

    unregister: function() { 
     var observerService = Components.classes["@mozilla.org/observer-service;1"] 
      .getService(Components.interfaces.nsIObserverService); 
     observerService.removeObserver(ObserverTest, "user-interaction-active"); 
    } 
} 

window.addEventListener("load", ObserverTest.register, false); 
window.addEventListener("unload", ObserverTest.unregister, false); 

, 나는 것이 도움이 내가 그것을 분리 할 수 ​​있도록 내가, 내가 위에서 무슨 짓을했는지와 같은 익숙하지 않은 구성 요소를 사용하려고 처음으로 아주 간단한 뭔가 시작 찾기 응용 프로그램 별 코드에서 올바르게 사용하고 있는지 확인하십시오. 나는 그것이 작동하는 것을 알기 전까지는 큰 응용 프로그램으로 끌어 들이지 않습니다.

+0

+1 감사합니다. – Thariama

+1

'this'가 'ObserverTest' 객체를 가리키고 있지 않기 때문에'unregister' 메소드가 올바르게 작동하지 않습니다. 그렇지 않으면 자리에 앉으십시오. – sdwilsh

+0

@sdwilsh - 수정 됨. 감사. –

관련 문제