Java SWT浏览器:等待动态页面完全加载

时间:2012-10-04 20:54:03

标签: java javascript asp-classic web swt

我正在使用SWT浏览器类,我遇到了问题。我正在尝试从使用ASP动态加载大多数数据的页面复制页面源。问题是浏览器事件监听器的事件完成当然是在显示整个页面内容之前触发的。这是我的代码的一部分:

class GermaniaProgressListener implements ProgressListener {

  final Browser browser;
  Calendar calen;
  SimpleDateFormat dateFormat;
  static Integer counter;
  static Integer changeCounter;
  static Integer completeCounter;


  public GermaniaProgressListener(Browser browser, Calendar calen, SimpleDateFormat dateForm) {
    super();
    this.browser = browser;
    this.calen = calen;
    this.dateFormat = dateForm;
    counter = 1;
  }

  public void changed(ProgressEvent event) {

  }

  @Override
  public void completed(ProgressEvent arg0) {
    String pageContent = "";
    if(counter > 1) {
      try {
        pageContent = (String)browser.evaluate("return document.body.innerHTML");
        FileUtilities.writeFile(
            FilePaths.GERMANIA_HTML.getFilePath().replace(".", ((Integer)(counter-1)).toString() + "."),
            pageContent);
      } catch (IOException e) {
        e.printStackTrace();
        LoggingUtilities.logException(e);
        BrowserUtilities.closeBrowser(browser);
      }
    }
    if(counter < 8) {
      String strDate = dateFormat.format(calen.getTime());
      Boolean ret = browser.execute("this.controler.loadPage(0, '', 'd=" + strDate + "')");
      if(!ret) {
        LoggingUtilities.logString("Error getting germania pages");
        BrowserUtilities.closeBrowser(browser);
        return;
      }
      calen.add(Calendar.DATE, 1);
      counter++;
    } else {
      BrowserUtilities.closeBrowser(browser);
    }
  }
};

public class PageDowGermania {
  static public void getPageContent() {
    final Browser browser = BrowserUtilities.createBrowser();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
    Calendar calen = Calendar.getInstance();
    calen.setTime(new Date());
    GermaniaProgressListener fpl = new GermaniaProgressListener(browser, calen, dateFormat);
    browser.addProgressListener(fpl);
    BrowserUtilities.startBrowser(browser, "http://www.germaniasport.hr");    
  }
}

我不是动态网页的专家,所以也许有人可以帮助我,如果有任何可能性,例如JavaScript中的脚本可以检查页面是否已满载。

提前致谢

1 个答案:

答案 0 :(得分:0)

window.onload = function () {
    alert("Everything loaded")
}

onload等待所有资源都被加载并执行包含的代码,即启动警报。

但请注意,onload在某些情况下可能不起作用。如果我没记错的话,有时候您无法使用浏览器的后退和前进按钮。