安卓WebView与JavaScript交互
16lz
2021-01-25
说明:
本文主要介绍安卓和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() {@Overridepublic void run() {webview.loadUrl("javascript:showInfoFromJava();}}, 1);
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- android图形图像
- 【Android】Service 的生命周期
- contentProvider操作
- AndroidStudio3.0及其以上集成ButterKnife时候的Android(安卓)Gr
- Android(安卓)intent.Action 参数值及对应功能介绍(转)
- Android获取系统拍照程序发出的广播
- Android(安卓)greenDAO数据库配置教程
- Android(安卓)Studio去除标题栏