Firefox でページがブックマークまたはダウンロードされたときを追跡する方法はありますか? ページのブックマークまたはダウンロード時にトリガーされるイベントはありますか? Add-on の開発に Add-on SDK を使用しています。
そうでない場合は、いくつかの回避策を教えてください。
Firefox でページがブックマークまたはダウンロードされたときを追跡する方法はありますか? ページのブックマークまたはダウンロード時にトリガーされるイベントはありますか? Add-on の開発に Add-on SDK を使用しています。
そうでない場合は、いくつかの回避策を教えてください。
ブラウザー ウィンドウには、ユーザーがページをブックマークまたはダウンロードしたときにトリガーされる<command>
要素があります。前者には IDBrowser:AddBookmarkAs
があり、後者には ID がありますBrowser:SavePage
。アドオン SDK 自体ではそれらにアクセスできないため、chrome
パッケージを使用して XPCOM に直接アクセスする必要があります。このようなもの:
// 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);
}
このコードはテストされていないため、小さな問題がある可能性がありますが、全体的な概念は正しいはずです。
編集window-utils
:実際には、内部パッケージを使用すると同じことがより簡単になるようです。ただし、このパッケージが提供する API が安定しているかどうかはわかりません。
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);
});