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

Eclipse plugin 如何从SWT浏览器中加载的页面读取隐藏属性,eclipse-plugin,swt,Eclipse Plugin,Swt,我正在开发一个Eclipse插件,它在SWT浏览器中加载一个URL。在浏览器中呈现的此页面具有隐藏的html属性。要求是读取隐藏属性的值 Browser Browser=新浏览器(shell,SWT.NONE); browser.setUrl(“www.com”); 我尝试使用statusTextListener在DOM上执行查询 browser.addStatusTextListener(新的StatusTextListener(){ 公共无效已更改(StatusTextEvent事件){

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

Browser Browser=新浏览器(shell,SWT.NONE);
browser.setUrl(“www.com”);
我尝试使用statusTextListener在DOM上执行查询

browser.addStatusTextListener(新的StatusTextListener(){
公共无效已更改(StatusTextEvent事件){
setData(“查询”,event.text);
}
});
browser.addProgressListener(新的ProgressListener(){
公共作废已完成(ProgressEvent){
布尔结果=浏览器
.execute(“window.status=document.getElementById('main').childNodes[0].nodeValue;”);
如果(!结果){
/*脚本可能会失败或在某些平台上不受支持*/
System.out.println(“未执行脚本”);
返回;
}
字符串值=(字符串)browser.getData(“查询”);
System.out.println(“节点值:”+值);
}
});
然而,这似乎不起作用。如果我尝试在浏览器中加载HTML文本而不是URL,效果会很好。
您知道如何在页面加载完成后从SWT浏览器读取DOM元素吗?

使用
browser::evaluate
在文档上下文中执行Javascript并将结果返回给调用者

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

String脚本=”“;
对象结果=browser.evaluate(脚本);
但是,支持的结果类型仅限于
字符串
数字
、和
布尔值
——以及这些类型的数组。计算结果为
null
undefined
的Javascript将返回
null


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

我能够使用上述解决方案获得值。隐藏字段的值是通过ajax异步填充的。因此,当调用完成的处理程序时,它可能并不总是保留值。有什么方法可以监视值的更改吗?如果您能够在发出Ajax请求时将侦听器“注入”到收到通知的页面中,您可以查看一下以调用应用程序。有什么方法可以在不更改目标html的情况下实现这一点?目标html不在我们的范围之内,因此我建议远离那些使您依赖于无法控制的源代码的实现细节的黑客。撇开这一点不谈,您可以使用Browser::execute注册某种全局fetch/XHR请求侦听器,每当从该页面发出请求时,该侦听器都会收到通知。但不确定是否存在这样的浏览器API。