ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Android 开发进程 0.36 原生与H5交互

2021-10-20 01:00:06  阅读:335  来源: 互联网

标签:调用 url 0.36 H5 json WebView Android 方法 webview


JS调用原生方法

H5调用Android方法基本有两种,第一步通用的初始化webview

WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true); //允许在WebView中使用js

2 创建桥接类,这是第一种方法

private Context mContext;
private WebView mWebView;
public static final String javaInterface= "javaInterface";
public JavaScriptMethod(Context context, WebView webView) {
    mContext = context;
    mWebView = webView;
}
@JavascriptInterface
public void showToast(String json){
    Toast.makeText(context, json, Toast.LENGTH_SHORT).show();
}

这种方法就是在JavaScript中直接调用桥接类定义的方法,在初始化webview的同时执行

JavaScriptMetod m = new JavaScriptMetod(this, webview);
webview.addJavascriptInterface(m, JavaScriptMetod.javaInterface);

如果现在在 tomcat的webapp下文件夹简单填写一个HTML文件,添加一个按钮并在script标签中添加以下JavaScript方法

  function jscallandroid(){
        var jsondata={"toast":"js调用了Android方法"};
        window.jsInterface.showToast(JSON.stringify(jsondata));
    }

运行tomcat服务,在webview中点击按钮即可执行原生方法。
第二种方法使用范围更加普遍,如果在javascript的方法中使用以下方式:

   var json = {"data": "I am a toast"};
   window.location.href="protocol://android?code=toast&data="+JSON.stringify(json);

webview会重加载给到的链接,再重写webview类的 shouldOverrideUrlLoading方法可以拦截返回的url,从而做出相应。url应提前规定,如开头写作上文的“protocol://android?”,后面的code和data可以区分请求的方法和传输的数据。如以下实例:

webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            String pre = "protocol://android";
            if (!url.contains(pre)) {
                return false;
            }
          //执行过滤
            return true;
        }
    });

setWebViewClient方法返回false是默认不执行过滤,继续加载。返回true则会拦截uri不直接加载。可以使用uri字符串匹配的方法过滤提取code和data
需注意的是shouldOverrideUrlLoading方法参数为view和url的方法已经弃用,在Lollipop及以上版本不会默认执行,所以需要重写同名的另一个参数为view和request的方法,在重写的方法中调用上述方法。

Android调用JS方法

这个使用较少,可以直接使用webview的loadurl方法。如Javascript中已经有以下代码:

 var showMessage=function (json) {
        alert(JSON.stringify(json))
    }

android中(如在点击事件方法中)可以使用:调用js方法需要在主线程中。

JSONObject json=new JSONObject();
json.put("alert","loading");
webView.loadUrl("javascript:showMessage("+json.toString()+")");

标签:调用,url,0.36,H5,json,WebView,Android,方法,webview
来源: https://www.cnblogs.com/baimiyishu/p/15427163.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有