앞선 포스팅에서는 SWT Browser 에서 Javascript 수행결과를 얻는 방법으로는 다음의 첫번째 방법을 포스팅 하였는데, 이번 포스팅에서는 두번째 방법에 대해 자세히 알아 보도록 한다.
- Browser 의 public Object evaluate (String script) 함수를 이용한 리턴값을 이용하는 방법
- Javascript 핸들러로 org.eclipse.swt.browser.BrowserFunction 을 확장구현한 클래스를 Browser 에 등록하는 방법
두번째 방법은 SWT Browser(org.eclipse.swt.browser.Browser)에서 Javascript Function Callback 을 등록하고, Browser 에서 등록된 Javascript Function 이 호출될경우 리턴값을 Java 에서 계속 핸들링 할 수 있는 방법이다.
main.js 파일에 Java 에서 Callback 으로 사용될 함수 javaFunction 함수를 선언해둔다. 이함수는 Javascript 에서 Java 를 호출하는 함수로 Argument 와 함께 호출 할 수 있다.
Main.Java 파일에서는 SWT Browser 의 callback 으로 사용될 클래스를 구현해야하는데 org.eclipse.swt.browser.BrowserFunction 클래스를 상속받아야한다.
BrowserFunction 클래스를 상속받아 구현할때 function 함수에서는 arguments 로 Javascript 에서 전달한 Argument 가 전달되어 오고, 비지니스로직 수행후 Javascript 로 다시 return 값을 전달 할 수 있다.
BrowserFunction 확장 클래스를 구현후 다음과 같이 SWT Browser 와 Javascript Callbck 을 등록해줘야한다.
new CustomFunction (browser, "javaFunction");
// main.js function sendToJava() { var result; try { result = javaFunction("javascript argument"); } catch (e) { return; } for (var i = 0; i < result.length; i++) { alert( result[i] ); } }
// Main.java final Browser browser = new Browser(parent, SWT.NONE); browser.setText( "...skip..." ); // skip html content final BrowserFunction function = new CustomFunction (browser, "javaFunction"); static class CustomFunction extends BrowserFunction { CustomFunction (Browser browser, String name) { super (browser, name); } public Object function (Object[] arguments) { Object returnValue = new Object[] { "Java Argument", }; return returnValue; } }
이와 같이 수행하면 SWTBrowser 에서 Push to invoke Java 버튼을 누를경우 Javascript 의 SendToJava() 함수가 호출되고 내부에서
Java 의 javaFunction 함수가 "javascript argument" 인자와 함께 호출되어 "Java Argument" 라는 리턴값을 Javascript 로 다시넘겨주게된다.
참고
'Eclipse' 카테고리의 다른 글
[Eclipse] File Decorator 확장 후 Problem Marker 가 보이지 않는 경우 (0) | 2014.03.24 |
---|---|
[Eclipse] File 의 Content 에 따른 Default Editor 설정 (0) | 2014.03.24 |
[Eclipse] SWT Browser 에서 Javascript 실행결과를 evaluate 함수로 얻기 (0) | 2013.11.11 |
[Eclipse] Eclipse Runtime 에 jar 안의 resource 에 대한 Local URL 얻어오기 (0) | 2013.10.03 |
[Eclipse] extension 의 IConfigurationElement 으로 부터 해당 Bundle 얻어오기 (0) | 2013.10.02 |