2011-10-17 3 views
7

내 HTML 파일에 문자열 값을 반환하는 javascript 함수 xxx_return()이 있습니다. Java 레이어에서이 값을 가져올 수있는 방법이 있습니까?SWT에서 Javascript 함수와 대화하는 방법

이 html을 표시하려면 SWT 쉘을 사용하고 있습니다. SWT는 스크립트 기능의 반환 값을 얻기 위해 모든 기능을 수행합니까?

편집 :

내 코드는 다음과 같은 것입니다 : 패키지 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의 예상 객체와 같은 예외 제공 :

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

사람이 찾을 수 : 내가 좋아하는 스크립트 태그의 기능을 작성한 자바 스크립트에서

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) 

을 이 오류? 나는 그것이 오류를 치는 곳을 이해하지 못한다.

감사합니다.

답변

4

SWT Browser 개체를 사용하십시오. 그런 다음 String result = (String)Browser.evaluate("xxx_return();")을 사용하면됩니다.

+0

내 질문을 편집했습니다. 내가 말했듯이,하지만 그것은 내게 예외를 준다. 감사 오류 – Kris

+1

IE9에서'Browser # evaluate' 및 null 반환 값에 관한 버그가 있습니다 : https://bugs.eclipse.org/bugs/show_bug.cgi?id=344597. 이 문제를 해결하려면'Browser.evaluate ("foo() ||"; ")'이것을 상수 문자열을 반환하는 Javascript 함수로 간소화 할 수 있습니까? 그것은 성공합니까? –

+1

javascript에서 String을 검색 할 수 있는데, evaluate을 Browser.evaluate ("return foo()"); – Kris

4

브라우저에서 페이지를로드하기 전에 Browser.evaluate()가 호출되기 때문에 예외가 발생했습니다. 완성을 알기 위해 ProgressListener를 추가하고 그것을 호출 해 보았습니다. 또한 모든

0

위의 솔루션, 표현의 앞에 "반환"을 추가

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); 
       } 
      }); 

감사합니다. 또한 평가하는 대상에 따라 완료된 이벤트는 무시할 수 있습니다. 다음 표현이 작동합니다.

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

브라우저에로드 된 페이지에서 자바 스크립트를 평가하는 경우, 그렇지 않으면 자바 스크립트가로드되지 않았을 수 있습니다 후 완료 이벤트를 호출 할 필요가 평가한다.

관련 문제