我正在为Fennec开发一个简单的扩展程序,该扩展程序必须在每个加载的页面上添加特殊的HTML元素。我创建了这个简单的overlay.js:
var MyAddon = {
onLoad: function(aEvent){
var appcontent = document.getElementById("appcontent"); // Firefox
if (!appcontent) {
appcontent = document.getElementById("browsers"); // Fennec
}
if (appcontent) {
appcontent.addEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
}
},
onUnLoad: function(aEvent){
var appcontent = document.getElementById("appcontent"); // Firefox
if (!appcontent) {
appcontent = document.getElementById("browsers"); // Fennec
}
if (appcontent) {
appcontent.removeEventListener("DOMContentLoaded", MyAddon.onDocumentLoad, true);
}
},
onUIReady: function(aEvent){
},
onUIReadyDelayed: function(aEvent) {
},
onDocumentLoad: function(aEvent) {
alert("OK");
}
};
window.addEventListener("load", MyAddon.onLoad, false);
window.addEventListener("unload", MyAddon.onUnLoad, false);
window.addEventListener("UIReady", MyAddon.onUIReady, false);
window.addEventListener("UIReadyDelayed", MyAddon.onUIReadyDelayed, false);
问题在于,启动浏览器时仅显示一次警报,我希望它会在加载的每个页面上显示。我究竟做错了什么?
Fennec版本:4.0b5(在Windows桌面版本上测试)
谢谢!
最佳答案
不幸的是,这对于Fennec而言更为复杂。内容文档中没有诸如“ DOMContentLoaded”之类的事件。这是因为主窗口(覆盖层覆盖了Javascript)与子窗口(内容窗口)处于不同的进程中
你必须:
在每个新标签页中加载脚本:
browser.messageManager.loadFrameScript(“ chrome://my_add_on/content/content.js”,true);
在content.js中,侦听DOMContentLoaded事件:
addEventListener(“ DOMContentLoaded”,process,true);
函数过程(事件){...}
有关更多信息,请检查以下页面:
https://wiki.mozilla.org/Mobile/Fennec/Extensions/Electrolysis
https://hg.mozilla.org/mobile-browser/file/8167d57cab8e/chrome/content/browser.js#l1327