如何从使用SWT浏览器从ajax请求获取数据的java脚本函数获取eclipse函数的返回值?

时间:2017-05-27 14:40:03

标签: javascript java browser swt

我试过以下......

我在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函数返回空对象,等待请求返回数据。

我怎样才能做到这一点..?

1 个答案:

答案 0 :(得分:1)

在处理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的Browser优秀教程:

http://blog.vogella.com/2009/12/21/javascript-swt/