webview 내의 javascript 에서 android java code 의 호출
myWebView.addJavascriptInterface(new WebAppInterface(this), "MyInterface");
를 실행하면, WebView(myWebView) 안의 document
에 ‘MyInterface’ 라는 global object 를 추가하게 된다.[ref. 1]
@JavascriptInterface
annotation 이 있으면 javascript 에서 그 method 를 위에서 추가한 global object 를 이용해서 접근할 수 있다.
public class TableWebView extends Activity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
WebView wvtable= (WebView)findViewById(R.id.webViewTable);
wvtable.addJavascriptInterface(new WebAppInterface(this), "MyInterface");
WebSettings webSettings = wvtable.getSettings();
webSettings.setJavaScriptEnabled(true);
...
}
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void startNewActivity() {
//startActivity(new Intent(this, youactivityname.class));
}
}
<input type="button" value="Click Here" onClick="showActivity()" />
<script type="text/javascript">
function showActivity() {
MyInterface.startNewActivity();
}
</script>
webview 에 원하는 javascript code 넣기
WebView 에 WebViewClient 를 새롭게 set 하고, 시작하는 시점(onPageStarged
)에 원하는 javascript code 를 넣는다.
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon){
String jsScript= "javascript:var functions_array = ['testNativeMethod'];";
jsScript+="var jsinterface = {};"
jsScript+="functions_array.map(function(id){"
jsScript+="jsinterface[id]= function() {"
jsScript+="try{return temp_obj[id].apply(temp_obj, arguments);}"
jsScript+="catch(e) { console.log('ERROR: ' + e + ', method ' + id);"
jsScript+="return false;}}})"
view.loadUrl(jsScript);
}
});
댓글 없음:
댓글 쓰기