我正在尝试创建一个firefox插件,它将在启动时查找某个页面并从中获取一些信息。我无法在加载时找到该页面。这是我到目前为止所做的:
var myfancyaddon = {
onLoad: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(function restored() {
observerService.removeObserver( restored, "sessionstore-windows-restored");
var browser = myfancyaddon.findMySite();
if (browser) {
alert("tree falling in the woods"); // THIS LINE NEVER RUNS
browser.contentWindow.addEventListener("load", function tab_loaded(){
browser.contentWindow.removeEventListener("load", tab_loaded(), false);
alert("mysite loaded!");
}, false);
}
}, "sessionstore-windows-restored", false);
},
findMySite: function() {
var browsers = gBrowser.browsers;
for ( var i = 0; i < browsers.length; i++ ) {
var browser = browsers[i];
if (!browser.currentURI.spec) continue;
if ( browser.currentURI.spec.match('^https?://(www\.)?mysite\.com/') ) return browser;
}
return null;
}
};
window.addEventListener("load", function ff_loaded(){
window.removeEventListener("load", ff_loaded, false); //remove listener, no longer needed
myfancyaddon.onLoad();
},false);
经过一些调查后,似乎currentURI.spec在成为mysite.com之前的短时间内是“约:空白”。有什么想法吗?
答案 0 :(得分:0)
您可以使用gBrowser.addEventListener("DOMContentLoaded", myfunction, false);
监听所有标签文档上的页面加载,然后仅根据网址运行代码,而不是先过滤然后再添加加载监听器。
https://developer.mozilla.org/en/XUL_School/Intercepting_Page_Loads
答案 1 :(得分:0)
当上一个会话中的标签已经恢复并且这些标签中的加载已经开始时,会发送"sessionstore-windows-restored"
通知(有时:&#34;不要加载标签直到选中&#34;选项意味着负载甚至不在后台选项卡中启动。但是,在联系服务器之前,这些选项卡的位置仍为about:blank
,因为加载的地址可能会重定向或服务器可能无法访问(意味着内部重定向到about:neterror
)。 Firefox仅在确定从新位置提供内容时更改浏览器位置。
intercept page loads确实应该更好,而不是等待会话恢复。