【问题标题】:Eclipse SWT: Browser#evaluate() always returns nullEclipse SWT:Browser#evaluate() 始终返回 null
【发布时间】:2015-05-26 19:02:14
【问题描述】:

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

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

我有一个函数可以调用评估方法。 (该功能通过点击控件上的 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 应用程序上的测试按钮时,我可以看到带有“测试”的警告框。但是evaluate() 总是返回null。代码有什么问题?谢谢

【问题讨论】:

  • 尝试使用“return getClientContent();”
  • 是的。有用!非常感谢。

标签: java swt eclipse-rcp


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    返回值仅限于几种类型:

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

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

    如果脚本返回一个受支持类型的值,则返回一个 java 返回值的表示形式。支持的 javascript -> java映射是:

    *javascript null 或未定义 -> null

    *javascript> 数字 -> java.lang.Double

    *javascript 字符串 -> java.lang.String

    *javascript boolean -> java.lang.Boolean

    *javascript 数组,其元素都是支持的类型 -> java.lang.Object[]

    试一试

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

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

    试一试

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

    “评估”状态的文档

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2015-08-15
      • 2012-03-18
      • 2016-11-04
      • 2016-07-28
      • 2010-11-08
      • 2017-11-26
      • 2015-02-23
      • 2017-11-16
      相关资源
      最近更新 更多