SWT Browser(org.eclipse.swt.browser.Browser)에서 Runtime 에 해당 Browser 상에서 Javascript 의 수행결과를 얻고 싶을 경우가 있다.
SWT Browser 에서 Javascript 수행결과를 얻는 방법으로는 다음과 같이 2가지 방법이 있다.
- Browser 의 public Object evaluate (String script) 함수를 이용한 리턴값을 이용하는 방법
- Javascript 핸들러로 org.eclipse.swt.browser.BrowserFunction 을 확장구현한 클래스를 Browser 에 등록하는 방법
여기에서는 Browser 의 evaluate 함수를 이용하여 Javascript 수행 값을 얻는 방법을 알아 보도록 한다.
evaluate 함수는 Javascript 의 eval 함수와 비슷하다고 생각하면 되는데, 이용 방법은 간단하다.
다음과 같이 Browser 의 evaluate 함수에 Runtime 에 수행할 Javascript Code 를 넣어주면 된다.
final Browser browser = new Browser(parent, SWT.NONE); browser.setJavascriptEnabled(true); browser.addProgressListener(new ProgressAdapter() { public void completed(ProgressEvent event) { String bodyHTML = (String) browser.evaluate("return document.body;"); // TODO: } });
evaluate 함수는 다음과 같이 5개의 type 을 리턴한다.
- javascript null or undefined -> null
- javascript number -> java.lang.Double
- javascript string -> java.lang.String
- javascript boolean -> java.lang.Boolean
- javascript array whose elements are all of supported types -> java.lang.Object[]
evaluate 함수를 사용할때 주의 할 점은 Browser 객체와 같은 Thread 에서 수행하면 evaluate 함수가 Async 하게 동작하므로 제대로 된 값을 리턴받지 못하는 경우가 발생 할 수 있다. 따라서 다른 Thread 혹은 ProgressListener 등에서 수행되도록 작성하여야 한다.
'Eclipse' 카테고리의 다른 글
[Eclipse] File 의 Content 에 따른 Default Editor 설정 (0) | 2014.03.24 |
---|---|
[Eclipse] SWT Browser 로 Java 와 Javascript Function Callback 연결하기 (0) | 2013.11.11 |
[Eclipse] Eclipse Runtime 에 jar 안의 resource 에 대한 Local URL 얻어오기 (0) | 2013.10.03 |
[Eclipse] extension 의 IConfigurationElement 으로 부터 해당 Bundle 얻어오기 (0) | 2013.10.02 |
[Eclipse] jface Dialog 를 상속받은 경우 Titile 등을 설정하기 (0) | 2013.09.12 |