[컴][안드로이드] webview 내의 javascript 에서 android java code 의 호출

안드로이드에서 웹뷰에 접근

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);
        }
    });

References

  1. java - Understanding Android webview javascript interface - Stack Overflow

댓글 없음:

댓글 쓰기