我正在尝试编写firefox扩展,它将在加载(特定)页面时运行(它将替换相同的关键字)。
我写代码如下:
window.addEventListener("load", function() maApp.init(); }, false);
var maApp= {
init: function() {
var appcontent = document.getElementById("appcontent"); // browser
if(appcontent)
appcontent.addEventListener("DOMContentLoaded", maApp.onPageLoad, true);
var messagepane = document.getElementById("messagepane"); // mail
if(messagepane)
messagepane.addEventListener("load", function(event) { maApp.onPageLoad(event); }, true);
},
onPageLoad: function() {
alert("test);
doSomething();
}
};
但onPageLoad永远不会运行......没有警报......有人可以告诉我我做错了吗?
答案 0 :(得分:4)
首先获取浏览器元素的一些文字。在Firefox中,此元素的标识为content
,而不是appcontent
。仍然,建议的获取方式是window.gBrowser
变量。在Thunderbird 5中,浏览器元素的ID已更改,因此您的代码将停止工作 - 而不是通过ID,您应该使用window.messageContent
变量,该变量将在当前版本和未来版本中都有效。你会得到:
var browser = null;
if ("gBrowser" in window)
browser = window.gBrowser; // Firefox and SeaMonkey Browser
else if ("messageContent" in window)
browser = window.messageContent; // Thunderbird
else if ("getMessageBrowser" in window)
browser = window.getMessageBrowser(); // SeaMonkey Mail
if (browser)
...
现在关于收听页面加载,这里推荐的方法是进度监听器 - 请参阅https://developer.mozilla.org/en/Code_snippets/Progress_Listeners。您将进度监听器附加到浏览器并查找状态更改:
onStateChange: function(aWebProgress, aRequest, aFlag, aStatus)
{
if ((aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP) &&
(aFlag & Components.interfaces.nsIWebProgressListener.STATE_IS_WINDOW))
{
// A window finished loading
doSomething(aWebProgress.DOMWindow);
}
}