Eclipse SWT:Browser#evaluate()始终返回null

时间:2015-05-26 19:02:14

标签: java swt eclipse-rcp

我使用SWT Browser对象加载这样的网页:

Browser browser = new Browser(parent, SWT.BORDER);
browser.setUrl("http://localhost:18080/app/test-servlet");

我有一个函数来调用evaluate方法。 (通过单击控件上的SWT按钮触发该功能。)

public void evaluate() {
    Object content = browser.evaluate("getClientContent();");
    System.out.println("content: " + content);
}

在网页上,javascript函数getClientContent()是:

<script type="text/javascript">
    function getClientContent() {
        alert("test");
        return "test";
    }
</script>

当我点击SWT应用程序上的测试按钮时,我可以看到显示“test”的警告框。但evaluate()始终返回null。代码有什么问题?感谢

2 个答案:

答案 0 :(得分:3)

您需要在JavaScript中“返回”结果,如下所示:

Object content = browser.evaluate("return getClientContent();");

答案 1 :(得分:0)

返回值仅限于以下几种类型:

  

返回执行指定脚本的结果(如果有)。

     

在上下文中评估包含javascript命令的脚本   目前的文件。如果是文档定义的函数或属性   通过脚本访问,然后不应该调用此方法   文档已完成加载(ProgressListener.completed()给出   通知此)。

     

如果脚本返回支持类型的值,则返回java   返回值的表示。支持的javascript - &gt;   java映射是:

     

* javascript null或undefined - &gt; null

     

* javascript&gt;号码 - &gt; java.lang.Double

     

* javascript string - &gt; java.lang.String中

     

* javascript boolean - &gt; java.lang.Boolean

     

* javascript数组,其元素都是受支持的类型 - &gt; java.lang.Object中[]

试试例子

 Object result = browser.evaluate("return 1;");

如果不支持返回类型...似乎返回null。

试试例子

Object window = browser.evaluate("return window;");

&#34;评估&#34;的文档状态

  

如果返回值的类型不受支持,则抛出SWTException,或者   如果评估脚本会导致抛出javascript错误。

我发现误导,因为我不希望上面的行抛出异常,因为无法返回窗口对象。