如果用户中断页面加载,如何处理?

时间:2011-11-01 18:14:08

标签: javascript firefox-addon xul

在我的扩展中,我依赖于DOMContentLoaded事件。这很好用。但如果用户在中间取消页面加载,则会失败。我的扩展根本不起作用。我希望它在这里优雅地降级。那么,无论如何处理这个案子?

1 个答案:

答案 0 :(得分:3)

一种可能性是使用nsIWebProgressListener来监控页面加载事件的进度。即使用户中断了页面加载,onStateChange方法在请求完成时也会以STATE_STOP状态执行。

这是一个简单的例子:

const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;  
const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP;  

window.addEventListener("load", function(e) {
    gBrowser.addProgressListener({
        QueryInterface: function(aIID) {  
            if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||  
                aIID.equals(Components.interfaces.nsISupportsWeakReference) ||  
                aIID.equals(Components.interfaces.nsISupports))  
                return this;  
            throw Components.results.NS_NOINTERFACE;  
        },  

        onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {  
            if (aFlag & STATE_STOP) {  
                // load finished or was stopped
                alert("stop");
            }  
        },  

        onLocationChange: function(aProgress, aRequest, aURI) { },  
        onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { },  
        onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { },  
        onSecurityChange: function(aWebProgress, aRequest, aState) { }  
    });
}, false);

这当然是一个玩具的例子。进一步阅读一些实施细节: