我已经尝试过以下......
我在 eclipse 中有这个:我在 java 中有一个按钮,可以在 javascript 中触发此函数
Object status = browserCtrl.evaluate("return atm.java.webToJavaPerspective()");
然后我在javascript中有这个函数
function atm.java.webToJavaPerspective(){
returnData = {};
//ajaxRequest = some ajaxRequest variable
$.when(ajaxRequest).then(function( data, textStatus, jqXHR ) {
//modify the data
returnData.textStatus = textStatus;
//this return statement should return data to java function
return returnData;
});
//this will return empty object
return returnData;
}
但我总是得到空对象。因为ajax请求需要几秒钟的时间,而我的javascript函数返回空对象,等待请求返回数据。
我怎样才能实现这个目标..?
最佳答案
处理 Ajax 调用时,获得结果后,您必须从 Javascript 代码中调用所谓的 BrowserFuntion
。
下面是如何定义 BrowserFunction
以及如何从 Javascript 调用它的示例:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
browser.setText("<a href='#' onClick='theJavaFunction()'>Click me!</a>");
new BrowserFunction(browser, "theJavaFunction")
{
@Override
public Object function(Object[] objects)
{
System.out.println("Call from Javascript");
return null;
}
};
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
}
此外,Vogella 提供了有关浏览器
的优秀教程:
关于javascript - 如何从使用SWT浏览器从ajax请求获取数据的java脚本函数获取eclipse函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44218165/