安卓WebView与JavaScript交互

说明:

本文主要介绍安卓和JavaScript的交互:js调用安卓有参、js调用安卓无参、安卓调用js有参、安卓调用js无参


一、JS调用Android并传参

Android代码

public class MainActivity extends Activity {
    private WebView webView;

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

        webView = (WebView) findViewById(R.id.webView);

        //设置WebView支持JavaScript
        webView.getSettings().setJavaScriptEnabled(true);

        String url = "http://xxx.html";
        webView.loadUrl(url);

        //在js中调用本地java方法
        webView.addJavascriptInterface(new JsInterface(), "AndroidWebView");

        //添加客户端支持
        webView.setWebChromeClient(new WebChromeClient());
    }

    private class JsInterface {
        public JsInterface() {
        }

        //在js中调用window.AndroidWebView.showInfoFromJs(name),便会触发此方法。
        @JavascriptInterface
        public void showInfoFromJs(String name) {
            //TODO 本地方法
        }
    }
}

JS代码






Android WebView 与 Javascript 交互

  



  

测试Android WebView 与 Javascript 交互

JS调用Java

二、JS调用Android不传参

Android代码

private class JsInterface {
        public JsInterface() {
        }

        //在js中调用window.AndroidWebView.showInfoFromJs(name),便会触发此方法。
        @JavascriptInterface
        public void showInfoFromJs() {
            //TODO 本地方法
        }
    }

JS代码


三、Android调用js并传参

Android代码

public class MainActivity extends Activity {
    private WebView webView;

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

        webView = (WebView) findViewById(R.id.webView);

        //设置WebView支持JavaScript
        webView.getSettings().setJavaScriptEnabled(true);

        String url = "http://xxx.html";
        webView.loadUrl(url);

        //添加客户端支持
        webView.setWebChromeClient(new WebChromeClient());
    }
   
    //button点击事件
    public void sendInfoToJs(View view) {  
        String msg = ((EditText) findViewById(R.id.input_et)).getText().toString();  
        //调用js中的函数:showInfoFromJava(msg)  
        webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");  
    }  
}

JS代码


四、Android调用js不传参

Android代码

//button点击事件
    public void sendInfoToJs(View view) {  
        //调用js中的函数:showInfoFromJava(msg)  
        webView.loadUrl("javascript:showInfoFromJava()");  
    }  

JS代码



注意:

Android调用js方法,如果在oncreate方法中调用,js是不会执行的,需要延迟加载,哪怕只是1毫秒

webview.postDelayed(new Runnable() {
	@Override
	public void run() {
		webview.loadUrl("javascript:showInfoFromJava();
	}
}, 1);


你可能感兴趣的:(android)