Android 与JS互调(Vue项目,X5WebView)

程序员 2024-9-3 07:33:55 92 0 来自 中国
Android与JS 互调几种方式:

一. JS 调用Android

1.  方法1
webview.setWebViewClient(new X5WebViewClient()) 自界说WebViewClient,重写shouldOverrideUrlLoading方法,判定Url实现

  • 关键代码  Android注册:        public class X5WebViewClient extends WebViewClient {           @Override           public boolean shouldOverrideUrlLoading(WebView webView, String url) {                 if (url.contains("js-call:")) {                         if (url.contains("playLogd")) {                                Log.d("X5WebViewMyself", "Js调用android方法shouldOverrideUrlLoading");                          }                     return true;                  }                 webView.loadUrl(url); // 不加载自带欣赏器                 return true;            }         }  JS调用:         function JSCallAndroid1(param){ //写一个方法          var url="js-call://"+param;          document.location = url;         }
1.  方法2
webview.addJavascriptInterface(new JavaFuckJSInterface(this),"APP") 自界说JavaFuckJSInterface类, 通过@JavascriptInterface注解实现

  • 关键代码  Android注册:          public class JavaFuckJSInterface{               private WeakReference<X5WebActivity> x5WebViewActivity;              public JavaFuckJSInterface(X5WebActivity context) {                    x5WebViewActivity = new WeakReference<>(context);              }           //通过这个@JavascriptInterface转化成绑定的“App”对象下的同名函数,js代码可以直接调用           @JavascriptInterface// JS 让 Java 吐司           public void jsCallAndroidFun(String data) {                 x5WebViewActivity.get().toastShow(data);            }         }  JS调用:         function JSCallAndroid2(param){ //写一个方法          window.APP.jsCallAndroidFun('JS调用Android方法2-乐成了!!')         }
3. 分析哪个方法比力好
第二种方法比力好
二. Android 调用 JS

留意:Android调用Vue中方法,使其弹框alert,必要关键代码:
webview.setWebChromeClient(new WebChromeClient());webview.getSettings().setJavaScriptEnabled(true);1.  方法1
webView.loadUrl();同步方法,没有返回参数。
界说字符串实现  String methondStr = "javascript:showJavaCallJsToast()";//不传参

  • 关键代码  Android调用:           String methondStr = "javascript:showJavaCallJsToast()";//不传参         //    String methondStr = "javascript:showJavaCallJsToast('"+ msg+"')";//传参            webView.loadUrl(methondStr);  JS注册:         function showJavaCallJsToast(msg){ //写一个方法          alert(msg)         }
1.  方法2
webView.evaluateJavascript,异步方法,有返回参数
留意:Android调用Vue中方法,总是失败,是由于该方法没有注册到window上,加上下面代码
mounted () { window.showJavaCallJsToastAsync = this.showJavaCallJsToastAsync window.showJavaCallJsToast = this.showJavaCallJsToast},

  • 关键代码  Android调用:       //    String methondStr = "javascript:showJavaCallJsToastAsync()";//不传参           String methondStr = "javascript:showJavaCallJsToastAsync('"+ msg+"')";           webView.evaluateJavascript(methondStr, new ValueCallback<String>() {      // 方式二                     @Override                     public void onReceiveValue(String result) {                                Log.d("X5WebViewMyself","-----------------JavaCallJsToastAsync---------"+result);                      }            });  JS注册:         function showJavaCallJsToastAsync(msg){ //写一个方法          alert(msg)          return msg         }
3. 分析哪个方法比力好
第二种方法比力好
2.png 三. Android 和 JS项目demo代码

关键信息


  • api 'com.yanzhenjie:permission:2.0.3' 权限管理
  • api 'com.tencent.tbs:tbssdk:44181' 腾讯X5WebView
  • BaseApplication 类设置腾讯x5内核主动下载
  • 移动端腾讯X5内核手动下载
    x5Webview.loadUrl("http://debugtbs.qq.com")
  • 移动端腾讯X5内核版本查抄x5Webview.loadUrl("http://soft.imtt.qq.com/browser/tes/feedback.html")
  • android内调用当地assets中index.html
    x5Webview..loadUrl("file:///android_asset/index.html");
Demo下载
Android和JS项目Demo下载
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 02:03, Processed in 0.186307 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表