앞선 포스팅에서는 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 을 등록해줘야한다.
1.
new
CustomFunction (browser,
"javaFunction"
);
01.
// main.js
02.
function
sendToJava() {
03.
var
result;
04.
try
{
05.
result = javaFunction(
"javascript argument"
);
06.
}
catch
(e) {
07.
return
;
08.
}
09.
for
(
var
i = 0; i < result.length; i++) {
10.
alert( result[i] );
11.
}
12.
}
01.
// Main.java
02.
03.
final
Browser browser =
new
Browser(parent, SWT.NONE);
04.
browser.setText(
"...skip..."
);
// skip html content
05.
06.
final
BrowserFunction
function
=
new
CustomFunction (browser,
"javaFunction"
);
07.
08.
static
class
CustomFunction
extends
BrowserFunction {
09.
CustomFunction (Browser browser, String name) {
10.
super
(browser, name);
11.
}
12.
public
Object
function
(Object[] arguments) {
13.
Object returnValue =
new
Object[] {
14.
"Java Argument"
,
15.
};
16.
return
returnValue;
17.
}
18.
}
이와 같이 수행하면 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 |