JS调用Android原生

Js调用原生的有很多种,有使用通过在js中打开一个url,android采用拦截Url的形式获取参数,执行android 原生的代码逻辑,比如跳转或者弹出键盘。 也有使用prompt 实现,通过调用html的prompt方法,android这边通过WebChromeClient方法的boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)回调。同样通过与前端沟通好的协议,完成自己的Native代码逻辑。而本文采用WebView.addJavascriptInterface实现H5与Native通信

public class JavaScriptUtil {    private TextView mTextView;    public JavaScriptUtil(TextView textView) {        mTextView = textView;    }    @JavascriptInterface    public void receiveByJs(String content) {        mTextView.setText(content);    }}//Activity中写入这样的代码mWebView = findViewById(R.id.web_view);mWebView.getSettings().setJavaScriptEnabled(true);//支持JsJavaScriptUtil mJavaScriptUtil = new JavaScriptUtil(tv_content);mWebView.addJavascriptInterface(mJavaScriptUtil, "jsCallNative");mWebView.loadUrl("file:///android_asset/index.html"

对应的html页面只需要调用即可。

<html><head>    <meta charset="utf-8">    <title>JsBridgetitle>    <script type="text/javascript">        function h5CallNative(){            var content = "我是来自Html的消息";            //jsCallNative 可以理解成我们传入的JavaScriptUtil 对象            jsCallNative.receiveByJs(content);        }//暂时不能管这个方法        function nativeCallH5(message){            document.getElementById("demo").innerHTML=message;        }    script>head><body><button onclick="h5CallNative()">H5调用原生button><p id="demo">p>body>html>

Android原生调用JS

同样是调用上面的html文件,有一点不同的是android端的调用只需要调用loadUrl 或者 evaluateJavascript api 就可以调用到js的方法。其中
mWebView.loadUrl("javascript:nativeCallH5('"+nativeMessage+"')") 方式是android 4.4以前的方法。 android 4.4以后使用方式二 mWebView.evaluateJavascript("javascript:nativeCallH5('"+nativeMessage+"')",new ValueCallback() {}调用js的方法。ValueCallback是js的返回值。

    private void nativeCallH5(final String nativeMessage) {        mWebView.post(new Runnable() {            @Override            public void run() {                //方式一                // mWebView.loadUrl("javascript:nativeCallH5('"+nativeMessage+"')");                                //方式二                mWebView.evaluateJavascript("javascript:nativeCallH5('"+nativeMessage+"')",                        new ValueCallback<String>() {                            @Override                            public void onReceiveValue(String value) {                                Log.d(TAG, "onReceiveValue: " + value);                            }                        });            }        });    }

注意:javascript:nativeCallH5('"+nativeMessage+"')" 里面有个单引号,如果传递的参数是字符串就要加单引号,数字可以不加。

更多相关文章

  1. Android 中三种使用线程的方法
  2. android常用颜色代码定义
  3. android 设置全屏的三种方式
  4. Android实现推送方式解决方案
  5. Android Activity onConfigurationChanged()方法 监听状态改变
  6. Android Market新增运营商结算方式
  7. Android高手进阶教程(二十)之---Android与JavaScript方法相互调
  8. android升级adt和sdk之后无法识别SDK Location的一个解决方式

随机推荐

  1. Android重写view时onAttachedToWindow ()
  2. android屏幕监听,手机是否处于锁屏状态,在
  3. JSP request(return String)用法详例
  4. 【北亚服务器数据恢复】EMC存储Raid5中2
  5. Hive安装配置
  6. 模态框代码及实例图片
  7. 模板函数 and 函数的参数与返回值
  8. 函数参数与返回值,模板字面量与模板函数
  9. 基于PHP实现生成随机水印图片
  10. jsp form表单方法示例