代码之家  ›  专栏  ›  技术社区  ›  aland

使用jquery和greasemonkey获得多个页面

  •  0
  • aland  · 技术社区  · 15 年前

    抱歉,标题不太好,这是一个很有分量的问题。 我要做的是从一个页面上的链接加载多个页面(它们在同一个主机上)。在我的例子中,它是线程视图中的一个论坛,我想加载文章的最后一页,以便进行某种预览。

    为了保持简单,我的代码示例假设jquery已经加载。

    基本上,代码是有效的,但是如果有多个请求,页面就会挂起,即-如果我将条件更改为intindex<3或更多。

        $('.lastposter').each(
            function (intIndex){
                if(intIndex < 2){
                    var threadlink = $('a', this)[1].href;
                    var thread = $.ajax({ type: "GET", url: threadlink, async: false }).responseText;
    
                    $(this.parentNode.parentNode).attr('title', $('.post', thread).text());
    
                }
            }
        );
    

    所以我的问题是,有没有更好的方法来做这个?我想我只需要在循环中暂停一下,或者改变它,这样ajax请求就发生在(例如)行的hover事件上。 另外,结果会被缓存吗?如果没有,有没有办法让它们被缓存,或者我应该把它留给服务器?我想把它们存储为一个gm变量(gm_setvalue),但可能会变得混乱或泄漏。

    如果你有一些想法、建议、例子等,我很高兴听到。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Wikser    15 年前

    代码的问题是,它请求 -异步请求。这将导致$.ajax函数等待服务器响应。

    对于异步请求,需要定义回调函数,如下所示:

    $.get(threadlink, function(thread) {  
        $(this.parentNode.parentNode).attr('title', $('.post', thread).text());  
    });
    

    要逐个处理链接,而不是同时处理一堆请求,可以捕获数组中的节点( makeArray )和 pop 按特定速率一次一个( setTimeout/setInterval )注意,Greasemonkey在这里有一些陷阱…

    结果将像其他页面一样被缓存。我在到期日前还拿不到。也许您必须更改服务器缓存/过期响应头。

    看看这个,听起来很相似(但不使用jquery)

    http://userscripts.org/scripts/show/19613