有什么办法当一个页面被书签或在Firefox下载跟踪?我 的意思是有没有被触发的书签或 下载页面中的任何事件?我正在使用Add-on SDK来开发附加组件。事件监听器要知道当一个页面书签/下载
如果没有,那么好心建议我一些解决方法。
有什么办法当一个页面被书签或在Firefox下载跟踪?我 的意思是有没有被触发的书签或 下载页面中的任何事件?我正在使用Add-on SDK来开发附加组件。事件监听器要知道当一个页面书签/下载
如果没有,那么好心建议我一些解决方法。
浏览器窗口中有<command>
elements是被触发,当用户的书签或下载的页面。前者有ID Browser:AddBookmarkAs
,后者Browser:SavePage
。附加SDK本身并不允许您访问它们,因此您需要使用chrome
package直接访问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);
});
你的代码不会抛出任何异常。但它仍然没有工作。基本上'onBookmark'和'onSavePage'函数没有被调用。所以大多数事件不会在书签和下载时触发。 – Shatu
这一切都在插件sdk文档中。虽然我必须承认我第一次没有看到它。
https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/event-targets.html
下面的例子是从文档。
注意,我不得不铬添加到需要使其由词在generateQI()调用工作
以及替代Components.interfaces。
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);
}
不,不在附加SDK中。顺便说一句,-1在新闻组中提问并立即在此发布 - 请耐心等待新闻组中的答案。 –
@WladimirPalant,我感到非常抱歉是这个不耐烦,但其实我还挺期限下工作,我不知道在这里张贴将同一个人的目标为,关于谷歌组。 关于这个问题。如果附加SDK没有为此提供任何功能,是否有任何解决方法? 玩XPCOM..will它会吗?如果是,那么请指引我正确的资源 – Shatu
引用了谷歌组线程:http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/3a16d2ad8a49f3b2 – Nickolay