Java的SWT浏览器:等到动态页面完全加载 [英] Java SWT browser: Waiting till dynamic page is fully loaded

查看:880
本文介绍了Java的SWT浏览器:等到动态页面完全加载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我和SWT浏览器类工作,我有一个问题。我想从其中大部分数据是动态加载有使用ASP页面复制页面的源代码。问题是,完成了浏览器事件监听器的事件当然是焙烧的显示整个页面内容之前。这里是我的code的一部分:

 类GermaniaProgressListener实现ProgressListener {  最后浏览器的浏览器;
  日历CALEN;
  SimpleDateFormat的日期格式;
  静态整数计数器;
  静态整数changeCounter;
  静态整数completeCounter;
  公共GermaniaProgressListener(浏览器的浏览器,日历CALEN,SimpleDateFormat的dateForm){
    超();
    this.browser =浏览器;
    this.calen = CALEN;
    this.dateFormat = dateForm;
    计数器= 1;
  }  公共无效改变(ProgressEvent事件){  }  @覆盖
  公共无效完成(ProgressEvent为arg0){
    串pageContent =;
    如果(计数器→1){
      尝试{
        pageContent =(字符串)browser.evaluate(回归document.body.innerHTML);
        FileUtilities.writeFile(
            FilePaths.GERMANIA_HTML.getFilePath()。替换(。((整数)(计数器-1))。的toString()+。),
            pageContent);
      }赶上(IOException异常五){
        e.printStackTrace();
        LoggingUtilities.logException(E);
        BrowserUtilities.closeBrowser(浏览器);
      }
    }
    如果(计数器< 8){
      串strDate = dateFormat.format(calen.getTime());
      布尔RET = browser.execute(this.controler.loadPage(0,'','D =+ strDate +'));
      如果(!RET){
        LoggingUtilities.logString(错误获取锗页);
        BrowserUtilities.closeBrowser(浏览器);
        返回;
      }
      calen.add(Calendar.DATE,1);
      反++;
    }其他{
      BrowserUtilities.closeBrowser(浏览器);
    }
  }
};公共类PageDowGermania {
  静态公共无效getPageContent(){
    最终的浏览器浏览器= BrowserUtilities.createBrowser();
    SimpleDateFormat的日期格式=新的SimpleDateFormat(年月日);
    日历CALEN = Calendar.getInstance();
    calen.setTime(新的Date());
    GermaniaProgressListener FPL =新GermaniaProgressListener(浏览器,CALEN,日期格式);
    browser.addProgressListener(FPL);
    BrowserUtilities.startBrowser(浏览器,http://www.germaniasport.hr);
  }
}

我不是在动态网页的专家,所以也许有人可以帮助我,如果有诸如任何可能性的JavaScript脚本,可以检查它的页面完全加载。

在此先感谢


解决方案

 的window.onload =函数(){
    警报(一切装)
}

的onload 等待,直到所有的资源被加载并会执行包含code,即启动警报。

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

I'm working with SWT browser class and I have a problem. I'm trying to copy page source from a page in which most of the data is dynamically loaded with use of ASP. The problem is that the event completed of browser event listener is of course fired before the whole page content is displayed. Here is a part of my code:

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");    
  }
}

I'm not an expert in dynamic web pages so maybe someone could help me if there is any possibility for example a script in JavaScript that could check it the page is fully loaded.

Thanks in advance

解决方案

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

onload waits until all resources are loaded and will the execute the contained code, i.e. start an alert.

Note however, that onload might not work in some scenarios. If I remember correctly, it sometimes doesn't work of you use the back and forward buttons of the browser.

这篇关于Java的SWT浏览器:等到动态页面完全加载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆