我正在为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的桌面版测试)
谢谢!
答案 0 :(得分:4)
不幸的是,这对Fennec来说更复杂。来自内容文档的“DOMContentLoaded”事件没有。这是因为您的叠加层附加了Javascript的主窗口与子窗口(内容窗口)位于不同的进程中
你必须:
使用每个新标签加载脚本:
browser.messageManager.loadFrameScript(“chrome://my_add_on/content/content.js”,true);
在content.js中,监听事件DOMContentLoaded:
addEventListener(“DOMContentLoaded”,process,true); 功能过程(事件){...}
有关详细信息,请查看以下页面: