我的HTML文件有一个javascript函数xxx_return(),它将返回一个字符串值。有什么办法可以从Java层中获取这个值吗?
我正在使用SWT shell来显示这个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>
任何人都可以在此找到错误吗?我不明白它在哪里遇到错误。
感谢。
答案 0 :(得分:4)
使用SWT Browser
对象。然后,您只需使用String result = (String)Browser.evaluate("xxx_return();")
。
答案 1 :(得分:4)
我发现了,自从在页面加载到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);
}
});
全部谢谢
答案 2 :(得分:1)
另外在上面的解决方案中,在表达式前添加“return”。此外,根据您评估的内容,可以忽略已完成的事件。以下表达式正常运作。
browser.evaluate("return 4 + 5;")
当然,如果您正在从浏览器中加载的页面评估javascript,则必须在完成事件后调用evaluate,否则可能未加载javascript。