2 Stimmen

Ereignis-Listener, um zu wissen, wann eine Seite mit einem Lesezeichen versehen/heruntergeladen wird

Gibt es eine Möglichkeit zu verfolgen, wann eine Seite in Firefox mit einem Lesezeichen versehen oder heruntergeladen wird? I Ich meine, gibt es ein Ereignis, das beim Setzen eines Lesezeichens ausgelöst wird oder Herunterladen einer Seite ausgelöst wird? Ich verwende Add-on SDK für die Entwicklung von Add-on.

Wenn nicht, dann schlagen Sie mir bitte einige Lösungen vor.

4voto

Wladimir Palant Punkte 55387

Das Browserfenster hat <command> Elemente die ausgelöst werden, wenn der Nutzer ein Lesezeichen setzt oder eine Seite herunterlädt. Ersteres hat die ID Browser:AddBookmarkAs letztere Browser:SavePage . Das Add-on-SDK selbst gibt Ihnen keinen Zugang zu ihnen, daher müssen Sie das chrome Paket um direkt auf XPCOM zuzugreifen. Etwa so:

// Add listener to all existing browser windows
var {Cc, Ci} = require("chrome");
var mediator = Cc["@mozilla.org/appshell/window-mediator;1"]
                 .getService(Ci.nsIWindowMediator);
var enumerator = mediator.getEnumerator("navigator:browser");
while (enumerator.hasMoreElements())
  listenToWindow(enumerator.getNext().QueryInterface(Ci.nsIDOMWindow));

// Get notified when new browser windows open
var observers = require("observer-service");
observers.add("chrome-document-global-created", function(window)
{
  if (window instanceof Ci.nsIDOMWindow && window.location.href == "chrome://browser/content/browser.xul")
    listenToWindow(window);
});

function listenToWindow(window)
{
  window.document
        .getElementById("Browser:AddBookmarkAs")
        .addEventListener("command", onBookmark, false);
  window.document
        .getElementById("Browser:SavePage")
        .addEventListener("command", onSavePage, false);
}

Dieser Code ist nicht getestet, so dass es kleinere Probleme geben könnte, aber das Gesamtkonzept sollte korrekt sein.

bearbeiten : Tatsächlich scheint das Gleiche einfacher zu sein, wenn Sie die interne window-utils Paket. Ich bin mir jedoch nicht sicher, ob die von diesem Paket bereitgestellte API stabil ist.

var windows = require("window-utils");
for (window in windows.browserWindowIterator)
  listenToWindow(window);

var observers = require("observer-service");
observers.add("chrome-document-global-created", function(window)
{
  if (window instanceof Ci.nsIDOMWindow && windows.isBrowser(window))
    listenToWindow(window);
});

1voto

atcw Punkte 31

Es steht alles in der Dokumentation des Addon-Sdk. Obwohl ich zugeben muss, dass ich es beim ersten Mal nicht gesehen habe.

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/event-targets.html

Das folgende Beispiel stammt aus der Dokumentation.

Beachten Sie, dass ich Cr zum require hinzufügen musste, damit es funktioniert

sowie die Ersetzung von Components.interfaces durch Ci im generateQI()-Aufruf.

var {Cc, Ci, Cu, Cr} = require("chrome");
Cu.import("resource://gre/modules/XPCOMUtils.jsm", this);    
var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"]
                          .getService(Ci.nsINavBookmarksService);

var bookmarkObserver = {
  onItemAdded: function(aItemId, aFolder, aIndex) {
    console.log("added ", bookmarkService.getBookmarkURI(aItemId).spec);
  },
  onItemVisited: function(aItemId, aVisitID, time) {
    console.log("visited ", bookmarkService.getBookmarkURI(aItemId).spec);
  },
  QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarkObserver])
};

exports.main = function() {
  bookmarkService.addObserver(bookmarkObserver, false);   
};

exports.onUnload = function() {
  bookmarkService.removeObserver(bookmarkObserver);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X