我正在尝试为Android编写一个Firefox扩展程序,每次网页更改时都会触发一个事件。它正在监视正在加载的URL(所有URL)和加载的页面内容(通过DOM检查)。我的问题是,使用以下代码的窗口加载事件仅在打开选项卡时加载,如果您离开页面,则不会触发任何事件。
如何挂钩任何网址的每个网页加载事件?
此代码是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) {}
我并不担心上面的代码只适用于新标签但不存在(我故意保持简单),这只是当我离开最初时新的标签页,我没有机会进入其他页面。
答案 0 :(得分:1)
在此页面上找到了稍微不同的方法:
https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/Mobile_development
使用cfx提供的布局而不使用bootstrap ... bootstrap 我能够使用page-mod实现我所需要的。