Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从SWT与Javascript函数对话_Java_Javascript_Swt - Fatal编程技术网

如何从SWT与Javascript函数对话

如何从SWT与Javascript函数对话,java,javascript,swt,Java,Javascript,Swt,我的HTML文件有一个javascript函数xxx_return(),它将返回一个字符串值。有什么方法可以从Java层获取这个值吗 我正在使用swtshell来显示这个html。SWT是否具有获取脚本函数返回值的功能 编辑: 我的代码如下所示: package test.html.simulation import org.eclipse.swt.SWT; import org.eclipse.swt.SWTException; import org.eclipse.swt.browser.B

我的HTML文件有一个javascript函数xxx_return(),它将返回一个字符串值。有什么方法可以从Java层获取这个值吗

我正在使用swtshell来显示这个html。SWT是否具有获取脚本函数返回值的功能

编辑:

我的代码如下所示: package test.html.simulation

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class BrowserExample{
public static void main(String[] args) 
{
  Display display = new Display();
  final Shell shell = new Shell(display);
  String html="";
  Object ob=null;
    shell.setText("Browser Example");
    shell.setSize(500, 350);

        final Browser browser = new Browser(shell, SWT.NONE);
        browser.setBounds(5, 75, 600, 400);

        browser.setUrl("http://localhost/test/tryxml.html");

        shell.open();
        //System.out.println(browser.getUrl());
        //try
        {
        html=(String)browser.evaluate("returnHTML();");
        }/*catch(SWTException e)
        {
            System.out.println(e.getMessage());

        }*/
        System.out.println(html);

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
            }

        display.dispose();


}
此代码为我提供了一个类似预期对象的SWT异常:

Exception in thread "main" org.eclipse.swt.SWTException: Object expected
at org.eclipse.swt.browser.WebBrowser$EvaluateFunction.function(Unknown Source)
at org.eclipse.swt.browser.WebSite.Invoke(Unknown Source)
at org.eclipse.swt.browser.WebSite$7.method6(Unknown Source)
at org.eclipse.swt.internal.ole.win32.COMObject.callback6(Unknown Source)
at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method)
at org.eclipse.swt.internal.ole.win32.IDispatch.Invoke(Unknown Source)
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source)
at org.eclipse.swt.ole.win32.OleAutomation.invoke(Unknown Source)
at org.eclipse.swt.browser.IE.execute(Unknown Source)
at org.eclipse.swt.browser.WebBrowser.evaluate(Unknown Source)
at org.eclipse.swt.browser.Browser.evaluate(Unknown Source)
at test.html.simulation.BrowserExample.main(BrowserExample.java:29)
在java脚本中,我在脚本标记中编写了一个函数,如:

<script>
function returnHTML()
  {
   var str=document.body.innerHTML;
   //alert(str);
   return str;
  }
</script>

函数returnHTML()
{
var str=document.body.innerHTML;
//警报(str);
返回str;
}
有人能找到这个错误吗?。我不明白它在哪里出错


谢谢。

使用SWT
浏览器
对象。然后您可以简单地使用
String result=(String)Browser.evaluate(“xxx_return();”)

我找到了它,因为在将页面加载到shell中之前调用了Browser.evaluate(),所以发生了异常。我添加了一个ProgressListener来了解完成情况,并尝试称它有效

browser.addProgressListener(new ProgressListener() {
              public void changed(ProgressEvent event)
              {

              }
              public void completed(ProgressEvent event)
              {String htm;
                htm=(String)browser.evaluate("return returnHTML()"); 
                System.out.println(htm);
              }
            });

感谢所有

除了上述解决方案,请在表达式前面添加“return”。此外,根据您正在评估的内容,可以忽略已完成的事件。下面的表达式正好有效

browser.evaluate("return 4 + 5;")

当然,如果您是从浏览器中加载的页面评估javascript,则必须在事件完成后调用evaluate,否则javascript可能未加载。

我已编辑了我的问题。我照你说的做了,但这给了我一个例外。你能找到错误吗?谢谢关于
浏览器#evaluate
和IE9的空返回值有一个错误:。要解决这个问题,您可以执行
Browser.evaluate(“foo()| |''''”)
您可以将其简化为只返回常量字符串的Javascript函数吗?成功了吗?我可以通过调用evaluate as Browser.evaluate(“return foo()”)从javascript中检索字符串;