onProgressChange没有提供Firefox扩展中页面加载的完整进度

时间:2013-09-20 18:51:08

标签: javascript firefox firefox-addon xul

我在firefox扩展中使用了tabsProgressListener的onProgressChange回调。 我正在使用此回调来跟踪页面加载的进度,以便我可以使用此信息将我的内容脚本注入页面。

但是,有时progressListener并不总是给出完成状态。

我无法使用此web site中提到的onPageLoad示例 因为即使切换选项卡,我也需要选项卡上的句柄来独立跟踪和加载脚本。

我不清楚为什么会这样。请帮忙。

如果在onPageLoad中有任何其他方法可以访问该选项卡,并且即使在切换选项卡时也可以独立跟踪并将脚本注入每个选项卡,这也可以。

以下是我实施的代码片段:

var tabsProgressListener = {
    onProgressChange: function( aBrowser,
                                aWebProgress,
                                aRequest,
                                aCurSelfProgress,
                                aMaxSelfProgress,
                                aCurTotalProgress,
                                aMaxTotalProgress
                                ) {
        Components.utils.reportError("onProgressChange: " + aCurTotalProgress + "/" + aMaxTotalProgress);
        if(aCurTotalProgress === aMaxTotalProgress) {
            onPageLoad(aBrowser);
        }
    }
};

gBrowser.addTabsProgressListener(tabsProgressListener);

function onPageLoad(context) {
    var loader = Components.classes[ "@mozilla.org/moz/jssubscript-loader;1" ]
                            .getService( Components.interfaces.mozIJSSubScriptLoader );
        loader.loadSubScript("chrome://signonex/content/script1.js", context);
        loader.loadSubScript("chrome://signonex/content/script2.js", context);
        loader.loadSubScript("chrome://signonex/content/script3.js", context);
}

1 个答案:

答案 0 :(得分:0)

使用制表符进度监听器时,您可以使用onStateChange

我不明白为什么你不能使用DOMContentLoaded,但是......有一些API可以将事件映射回windowevent.originalTarget.defaultView)和/或{{ 1}}(document)。

还有<tabbrowser>.getBrowserForDocument(document)和朋友。