Android쪽
WebView쪽
addJavascriptInterface() 에서 설정한 DOM명칭 "android"로 WebView에서 호출가능하다.
- final 매개변수를 잘 사용하자. -> 메소드 내에서 변경하면 안되는 값(주소값)일 경우에 사용하면 유용할 듯
public class LocalBrowser extends Activity { private static final String TAG = "LocalBrowser"; private final Handler handler = new Handler(); private WebView webView; private TextView textView; private Button button; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 화면에서 안드로이드 컨트롤 찾기 webView = (WebView) findViewById(R.id.web_view); textView = (TextView) findViewById(R.id.text_view); button = (Button) findViewById(R.id.button); // 임베딩된 브라우저-WebView-에 자바스크립트 활성화하기 webView.getSettings().setJavaScriptEnabled(true); // 자바 객체-AndroidBridge-를 브라우저의 자바 스크립트에 노출시키기 // 객체, 노출할 DOM명칭 webView.addJavascriptInterface(new AndroidBridge(), "android"); // 임의의 WebChromeClient 객체를 생성하여 WebView에 등록. // 여기의 Chrome은 브라우저 창 주의를 정리하는 모든 작업을 일컬음. 즉, 브라우저 처리을 할 클라이언트를 등록 webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { // return super.onJsAlert(view, url, message, result); Log.d(TAG, "onJsAlert(" + view + ", " + url + ", " + message + ", " + result + ")"); Toast.makeText(LocalBrowser.this, message, 3000).show(); result.confirm(); // 결과 처리됨 return true; // 여기서 처리했으므로 true 반환 } }); // 로컬 assets에서 웹 페이지 로딩하기 webView.loadUrl("file:///android_asset/index.html"); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "onClick(" + v + ")"); // 자바스크립트 호출 webView.loadUrl("javascript:callJS('Hello from Android')"); } }); } /** * 자바 스크립트에 노출된 객체 * */ private class AndroidBridge { public void callAndroid(final String arg) { // 반드시 final이어야 함 handler.post(new Runnable() { @Override public void run() { Log.d(TAG, "callAndroid(" + arg + ")"); textView.setText(arg); } }); } } } |
WebView쪽
<html> <head> <script type="text/javascript"> function callJS(arg) { document.getElementById("replaceme").innerHTML = arg; } </script> </head> <body> <h1>WebView</h1> <p> <a href="#" onclick="window.alert('Alert from JavaScript');">Display JavaScript alert</a> </p> <p> <a href="#" onclick="window.andriod.callAndroid('Hello from Browser');"></a> </p> <p id="replaceme"></p> </body> </html> |
- final 매개변수를 잘 사용하자. -> 메소드 내에서 변경하면 안되는 값(주소값)일 경우에 사용하면 유용할 듯
'프로그래밍 > Android' 카테고리의 다른 글
[TDD] 안드로이드 TDD 개발하기 (0) | 2010.11.15 |
---|---|
[Hello,Android] Thread와 google API 를 사용한 동시번역 (0) | 2010.08.31 |
[Hello,World] Sudoku (0) | 2010.08.31 |
[Hello,Android] Audio, Video (0) | 2010.08.30 |
[tip] LogCat 문자깨짐 (0) | 2010.08.18 |