如何听从Fennec扩展页面加载? [英] How to listen to page loads from Fennec extension?
问题描述
$ b $ pre $
var MyAddon = {
onLoad:function(aEvent){
var appcontent = document.getElementById(appcontent); // Firefox
if(!appcontent){
appcontent = document.getElementById(browsers);如果(appcontent){
appcontent.addEventListener(DOMContentLoaded,MyAddon.onDocumentLoad,true); // Fennec
}
},
onUnLoad:function(aEvent){
var appcontent = document.getElementById(appcontent); // Firefox
if(!appcontent){
appcontent = document.getElementById(browsers);如果(appcontent){
appcontent.removeEventListener(DOMContentLoaded,MyAddon.onDocumentLoad,true); // Fennec
}
$ b 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桌面版上测试)
$ b 谢谢!
不幸的是,这对Fennec来说更为复杂。不存在来自内容文档的DOMContentLoaded事件。这是因为你的覆盖层附加了Javascript的主窗口和子窗口(内容窗口)存在不同的进程。你必须:
$ b
-
加载每个新标签的脚本:
$ b 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 < a>
load a script with each new tab:
browser.messageManager.loadFrameScript("chrome://my_add_on/content/content.js", true);
Inside content.js, listen to the event DOMContentLoaded:
addEventListener("DOMContentLoaded", process, true); function process(event) { ... }
- https://wiki.mozilla.org/Mobile/Fennec/Extensions/Electrolysis
- https://hg.mozilla.org/mobile-browser/file/8167d57cab8e/chrome/content/browser.js#l1327
有关更多信息, / p>
I'm working on a simple extension for Fennec, which must add special HTML element to every loaded page. I've created this simple 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);
The problem is that alert is shown only one time when browser is started, I'd expect it to show on every page that loads. What am I doing wrong?
Fennec version: 4.0b5 (testing on Desktop version for Windows)
Thanks!
Unfortunately, this is more complex for Fennec. There is no such event as "DOMContentLoaded" coming from the content document. This is because the main window, where your overlay attached the Javascript, lives in a different process than the child windows (content windows)
You have to:
For more info, check this pages:
这篇关于如何听从Fennec扩展页面加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!