Web ページが変更されるたびにイベントを発生させる Android 用の Firefox 拡張機能を作成しようとしています。どの URL がロードされているか (すべての URL)、およびロードされたページのコンテンツ (DOM インスペクションを介して) を監視しています。私の問題は、以下のコードを使用したウィンドウ ロード イベントは、タブが開かれたときにのみロードされることです。ページから移動すると、イベントは発生しません。
任意の URL のすべてのページ読み込みイベントにフックするにはどうすればよいですか?
このコードは、bootstrap.js の内容全体です。
Components.utils.import("resource://gre/modules/Services.jsm");
var windowListener = {
onOpenWindow: function(aWindow) {
console.log('vipro.openWindow');
let domWindow = aWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowInternal || Components.interfaces.nsIDOMWindow);
domWindow.addEventListener("UIReady", function onLoad() {
domWindow.removeEventListener("UIReady", onLoad, false);
console.log('vipro.openWindow.loaded');
// ** ONLY EVER FIRED ONCE ** //
try {
var browser = Services.wm.getMostRecentWindow("navigator:browser");
} catch(e) {
console.log('vipro.openWindow.error.' + e.toString());
}
console.log('vipro.openWindow.loaded.DONE');
});
console.log('vipro.openWindow.DONE');
},
onCloseWindow: function(aWindow) {},
onWindowTitleChange: function(aWindow, aTitle) {},
};
function startup(data, reason) {
console.log('vipro.startup');
try {
let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
wm.addListener(windowListener);
} catch(e) {
console.log('vipro.startup.error.' + e.toString());
}
console.log('vipro.startup.DONE');
}
function shutdown() {
console.log('vipro.shutdown');
}
function install(aData, aReason) {}
function uninstall(aData, aReason) {}
上記のコードが新しいタブでのみ機能し、既存のものではないことを気にしていません(意図的にシンプルにしています)。最初の新しいタブページから移動すると、機会が得られないという事実だけです他のページにフックします。