【发布时间】:2010-07-04 16:15:58
【问题描述】:
我编写了一个基于 Mozilla Jetpack 的插件,它必须在加载文档时运行。对于“顶级文档”,这主要使用此代码 (OserverService = require('observer-service')):
this.endDocumentLoadCallback = function (subject, data) {
console.log('loaded: '+subject.location);
try {
server.onEndDocumentLoad(subject);
}
catch (e) {
console.error(formatTraceback(e));
}
};
ObserverService.add("EndDocumentLoad", this.endDocumentLoadCallback);
但当用户使用中键或(更重要的是!)为框架打开新标签时,不会调用回调。甚至这个话题我也只是通过阅读另一个扩展的源代码而不是通过文档得到的。
那么我如何注册一个真正在每次加载文档时都被调用的回调呢?
编辑:这似乎是我想要的:
function callback (event) {
// this is the content document of the loaded page.
var doc = event.originalTarget;
if (doc instanceof Ci.nsIDOMNSHTMLDocument) {
// is this an inner frame?
if (doc.defaultView.frameElement) {
// Frame within a tab was loaded.
console.log('!!! loaded frame:',doc.location.href);
}
else {
console.log('!!! loaded top level document:',doc.location.href);
}
}
}
var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
var mainWindow = wm.getMostRecentWindow("navigator:browser");
mainWindow.gBrowser.addEventListener("load", callback, true);
部分内容来自这里:https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads
【问题讨论】:
-
Mozilla 和 XPCOM 通常是非常小众的话题。通过访问 IRC 频道,您可能会更快地获得更多有用的答案(根据我的经验,这些人非常友好和乐于助人)
-
@kizzx2 你有那个 IRC 频道的地址吗?
-
irc.mozilla.org 上的#developers
标签: firefox-addon document observer-pattern xpcom firefox-addon-sdk