Android中JavaScript与Java交互

在4.2以前,JavaScript与Java交互如下:

webview.getSetting().setJavaScriptEnable(true);
webview.addJavascriptInterface(new Object(){
            public void clickOnAndroid(){
                 handler.post(new Runnable() {
                    @Override
                    public void run() {
                        System.err.println("javascript 调用 java");
                    }
                });
             }

         }, "javascript对象");

在4.2以后,为了使JavaScript能够调用Java的方法,需要为向JavaScript暴露的Java方法添加@JavascriptInteface 注解。否则在targetSdkVersion 17以上的版本,将会报错:
E/Web Console:Uncaught Type Error:Object [object Object] has no method ‘clickOnAndroid’

 webview.addJavascriptInterface(new Object(){
             @JavascriptInterface
            public void clickOnAndroid(){
                 handler.post(new Runnable() {

                    @Override
                    public void run() {
                        System.err.println("javascript 调用 java");

                    }
                });
             }

         }, "javascript对象");

简单案例:

package com.example.webviewdemo;

@SuppressLint("SetJavaScriptEnabled")
public class MainActivity extends Activity {

    private WebView webview;
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        webview = (WebView) findViewById(R.id.webview);
        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);
         handler = new Handler();
         webview.addJavascriptInterface(new Object(){
             @JavascriptInterface
            public void clickOnAndroid(){
                 handler.post(new Runnable() {
                    @Override
                    public void run() {
                        webview.loadUrl("javascript:testJS()");

                    }
                });
             }
         }, "demo");

        webview.loadUrl("file:///android_asset/demo.html");
    }

}

js代码(放在assets目录下):

<html>
<script language="javascript"> function testJS() { document.getElementById("myPic").src="test.png"; } </script>
<body>
  <a onClick="window.demo.clickOnAndroid()">
  <img id="myPic" src="ic_launcher.png" mce_src="ic_launcher.png"/><br>切换</a>
</body>
</html>

你可能感兴趣的:(JavaScript,java,android,交互)