JS异步/加载行为

时间:2013-03-20 16:45:51

标签: javascript jquery iframe

我有一个正在抓取网站数据的应用程序。它正在iFrame中抓取网站。我需要从同一个iframe中抓取后续网站,这两个iframe都有一个条目地址,该地址会导致带有字段和按钮的页面。在该页面上,我在字段中输入一个数字,然后按下按钮转到下一页。我遇到的问题是,当我(编码)按下按钮时,它不会等到页面加载和刮擦之前有任何东西。

setTimeOutDelay似乎完全被忽略了。

$(document).ready(function() {

  $('#startbutton').click(function() {
    $('#iframe').attr('src', 'www.pageone.com');
    // Here I start a load because I need to wait for the button to become available.
    $('#iframe').one('load', function() {
      $('#okbutton').click();
    });
    // This is where it goes wrong. I would assume that it waits for the second page 
    // to load. But it doesn't. Adding another load block didn't help.
    scrapeFunction();
  });

});

我如何正确地获得这些时间?

2 个答案:

答案 0 :(得分:1)

  

当我(编码)按下按钮时,它不等待页面加载和刮擦,然后才会出现

实际上,它甚至不等待按下按钮。相反,您要等待另一个加载事件:

var $if = $('#iframe');
// (1) assign a load handler
$if.one('load', function() { // that says "When loaded (first), … 
    // (3) assign the next load handler
    $if.one('load', function() { 
        // (5) which then (second load) can scrape the content
        scrapefunction();
    });
    // (4) and load it
    $('#okbutton').click();
}); // …"
// (2) and load it
$('#iframe').attr('src', 'www.pageone.com');

答案 1 :(得分:0)

这将在加载iFrame时执行内部代码。

$("iframe").ready(function() {
    //iFrame loaded
    scrapeFunction();
});​