首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firefox XPCOM setTimeout问题

Firefox XPCOM setTimeout问题
EN

Stack Overflow用户
提问于 2011-04-26 01:25:56
回答 1查看 409关注 0票数 0

我正在写一个简单的firefox扩展,它抓取一堆urls并提取某些字段(抓取的所有urls都将加载到用户的标签中)。

我面临的问题是部分实际访问URL并加载页面。我希望每个页面加载在一个固定的计时器周期。例如,每个站点每5秒访问一次。

我尝试了这里列出的两种方法http://groups.google.com/group/mozilla.dev.extensions/browse_thread/thread/de47c3949542b759,但都没有用。同时使用Components.classes"@mozilla.org/appshell/appShellService;1“和nsITimer。while循环立即执行,稍后加载页面(大约连续5秒后)

代码语言:javascript
复制
 function startCrawl()
    {
        while(urlq.length>0)
        {
            var currentUrl = urlq.shift();
            urlhash[currentUrl]=1;

            if(currentUrl!=undefined)
            {
                setTimeout(gotoURL,5000,currentUrl);
            }

        }
            start=0;
            alert('crawl stopped');

            for(var k in foundData)
            {
                alert('found: ' + k);
            }           

    }

    function gotoURL(gUrl)
    {
        mainWindow.content.wrappedJSObject.location=gUrl;
        extractContent();

    }

如何正确实现每5秒调用一次gotoURL的定时器函数?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-26 01:34:47

嗯,setTimeout是异步执行的。在调用函数之前,循环不会等待。你必须改变策略(如果我没理解错的话)。

例如,您可以在提取信息后触发下一个setTimeout

代码语言:javascript
复制
function startCrawl() {
    function next() {
        var currentUrl = urlq.shift();
        if(currentUrl) {
            setTimeout(gotoURL,5000,currentUrl, next);
        }
    }
    next();    
}

function gotoURL(gUrl, next) {
    mainWindow.content.wrappedJSObject.location=gUrl;
    extractContent();
    next();
}

是的,最好使用nsITimer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5781056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档