国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android和js的交互之jsbridge使用教程

2019-12-12 01:03:18
字體:
供稿:網(wǎng)友

前言

眾所周知,app的一些功能可能會使用到H5開發(fā),這就難免會遇到j(luò)ava與js 的相互調(diào)用,android 利用WebViewJavascriptBridge 實現(xiàn)js和java的交互,這里介紹下JsBridge第三方庫的使用。

github傳送門:https://github.com/lzyzsd/JsBridge  (本地下載

簡單分析

java與js相互調(diào)用如下:

java發(fā)送數(shù)據(jù)給js,js接收并回傳給java

同理,js發(fā)送數(shù)據(jù)給java,java接收并回傳給js

同時兩套流程都存在「默認(rèn)接收」 與 「指定接收」

大致調(diào)用流程圖如下:


依賴

項目build.gradle

repositories { // ... maven { url "https://jitpack.io" }}

app build.gradle

dependencies { compile 'com.github.lzyzsd:jsbridge:1.0.4'}

xml里直接使用com.github.lzyzsd.jsbridge.BridgeWebView替代原生WebView

另外放置兩個Button用于測試使用

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/java_to_js_default" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="java發(fā)送給js默認(rèn)接收"app:layout_constraintTop_toBottomOf="@+id/nav_bar" /> <Button android:id="@+id/java_to_js_spec" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="java發(fā)送給js指定接收"app:layout_constraintTop_toBottomOf="@+id/java_to_js_default" /> <com.github.lzyzsd.jsbridge.BridgeWebView android:id="@+id/webView" android:layout_width="0dp" android:layout_height="0dp"app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/java_to_js_spec" /></android.support.constraint.ConstraintLayout>

html文件里簡單放置兩按鈕發(fā)送數(shù)據(jù),同時提供打印信息

<html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div> <button onClick="jsToJavaDefault()">js發(fā)送給java默認(rèn)接收</button></div><br/><div> <button onClick="jsToJavaSpec()">js發(fā)送給java指定接收</button></div><br/><div id="show">打印信息</div></body></html>

這里我本地跑的一個簡單的django項目,起了個服務(wù)供使用

webview加載頁面


java發(fā)送數(shù)據(jù)給js

button注冊監(jiān)聽

javaToJsDefault.setOnClickListener(this);javaToJsSpec.setOnClickListener(this);

按鈕點擊事件,java傳遞數(shù)據(jù)給js

 //java傳遞數(shù)據(jù)給js @Override public void onClick(View v) {  switch (v.getId()) {   case R.id.java_to_js_default:    //默認(rèn)接收    webView.send("發(fā)送數(shù)據(jù)給js默認(rèn)接收", new CallBackFunction() {     @Override     public void onCallBack(String data) { //處理js回傳的數(shù)據(jù)      Toast.makeText(WebTestActivity.this, data, Toast.LENGTH_LONG).show();     }    });    break;   case R.id.java_to_js_spec:    //指定接收參數(shù) functionInJs    webView.callHandler("functionInJs", "發(fā)送數(shù)據(jù)給js指定接收", new CallBackFunction() {     @Override     public void onCallBack(String data) { //處理js回傳的數(shù)據(jù)      Toast.makeText(WebTestActivity.this, data, Toast.LENGTH_LONG).show();     }    });    break;   default:    break;  } }

js WebViewJavascriptBridge注冊事件監(jiān)聽,接收數(shù)據(jù)

<script>  //注冊事件監(jiān)聽,初始化  function setupWebViewJavascriptBridge(callback) {   if (window.WebViewJavascriptBridge) {    callback(WebViewJavascriptBridge)   } else {    document.addEventListener(     'WebViewJavascriptBridgeReady'     , function() {      callback(WebViewJavascriptBridge)     },     false    );   }  }  //回調(diào)函數(shù),接收java發(fā)送來的數(shù)據(jù)  setupWebViewJavascriptBridge(function(bridge) {   //默認(rèn)接收   bridge.init(function(message, responseCallback) {    document.getElementById("show").innerHTML = '默認(rèn)接收到Java的數(shù)據(jù): ' + message;    var responseData = 'js默認(rèn)接收完畢,并回傳數(shù)據(jù)給java';    responseCallback(responseData); //回傳數(shù)據(jù)給java   });   //指定接收,參數(shù)functionInJs 與java保持一致   bridge.registerHandler("functionInJs", function(data, responseCallback) {    document.getElementById("show").innerHTML = '指定接收到Java的數(shù)據(jù): ' + data;    var responseData = 'js指定接收完畢,并回傳數(shù)據(jù)給java';    responseCallback(responseData); //回傳數(shù)據(jù)給java   });  })<script>

java發(fā)送給js默認(rèn)接收


java發(fā)送給js指定接收

js發(fā)送數(shù)據(jù)給java

js按鈕點擊事件, 同時需要上面WebViewJavascriptBridge的注冊監(jiān)聽回調(diào)函數(shù)

 //js傳遞數(shù)據(jù)給java function jsToJavaDefault() {  var data = '發(fā)送數(shù)據(jù)給java默認(rèn)接收';  window.WebViewJavascriptBridge.send(   data   , function(responseData) { //處理java回傳的數(shù)據(jù)    document.getElementById("show").innerHTML = responseData;   }  ); } function jsToJavaSpec() {  var data='發(fā)送數(shù)據(jù)給java指定接收';  window.WebViewJavascriptBridge.callHandler(   'submitFromWeb' //指定接收參數(shù) submitFromWeb與java一致   ,data   , function(responseData) { //處理java回傳的數(shù)據(jù)    document.getElementById("show").innerHTML = responseData;   }  ); }

java 監(jiān)聽接收數(shù)據(jù)

  //默認(rèn)接收  webView.setDefaultHandler(new BridgeHandler() {   @Override   public void handler(String data, CallBackFunction function) {    String msg = "默認(rèn)接收到j(luò)s的數(shù)據(jù):" + data;    Toast.makeText(WebTestActivity.this, msg, Toast.LENGTH_LONG).show();    function.onCallBack("java默認(rèn)接收完畢,并回傳數(shù)據(jù)給js"); //回傳數(shù)據(jù)給js   }  });  //指定接收 submitFromWeb 與js保持一致  webView.registerHandler("submitFromWeb", new BridgeHandler() {   @Override   public void handler(String data, CallBackFunction function) {    String msg = "指定接收到j(luò)s的數(shù)據(jù):" + data;    Toast.makeText(WebTestActivity.this, msg, Toast.LENGTH_LONG).show();    function.onCallBack("java指定接收完畢,并回傳數(shù)據(jù)給js"); //回傳數(shù)據(jù)給js   }  });

js發(fā)送給java默認(rèn)接收


js發(fā)送給java指定接收


至此,jsBridge的使用流程完畢。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 台山市| 邮箱| 昭平县| 蓝田县| 政和县| 阜新| 两当县| 沿河| 永德县| 察雅县| 漳平市| 花莲市| 安庆市| 汉源县| 海南省| 嘉善县| 都昌县| 台安县| 册亨县| 桐乡市| 博白县| 客服| 柏乡县| 喜德县| 商南县| 合阳县| 六安市| 浦北县| 沙雅县| 永宁县| 峨边| 北流市| 松阳县| 祁门县| 湟中县| 崇州市| 屏东市| 沙河市| 屏东市| 潮州市| 大新县|