ドキュメントが読み込まれるたびに実行する必要がある 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