如何从SWT浏览器中加载的页面读取隐藏属性

时间:2019-07-03 05:16:53

标签: eclipse-plugin swt

我正在研究一个Eclipse插件,该插件在SWT浏览器中加载URL。浏览器中呈现的页面具有隐藏的html属性。要求是读取隐藏属性的值。

Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("www.<my_url>.com");

我尝试使用statusTextListener在DOM上执行查询

browser.addStatusTextListener(new StatusTextListener() {
  public void changed(StatusTextEvent event) {
    browser.setData("query", event.text);
  }
});
browser.addProgressListener(new ProgressListener() {

  public void completed(ProgressEvent event) {
    boolean result = browser
        .execute("window.status=document.getElementById('main').childNodes[0].nodeValue;");
    if (!result) {
      /* Script may fail or may not be supported on certain platforms. */
      System.out.println("Script was not executed.");
      return;
    }
    String value = (String) browser.getData("query");
    System.out.println("Node value: " + value);
  }
});

但是,这似乎不起作用。如果我尝试在浏览器而不是URL中加载HTML文本,则效果很好。 知道如何在页面加载完成后从SWT浏览器读取DOM元素吗?

1 个答案:

答案 0 :(得分:2)

使用Browser::evaluate在文档的上下文中执行Javascript并将结果返回给调用方。

要获取示例中main元素的第一个子元素的值,请按以下步骤开始:

String script = "<Javascript to return an array of hidden attribute names>";
Object result = browser.evaluate(script);

但是,受支持的结果类型仅限于stringnumberboolean-以及这些类型的数组。计算结果为nullundefined的Javascript将返回null

因此,您将需要调整查询DOM的Javascript以返回受支持的类型。