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

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

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

2019-10-22 18:13:18
字體:
供稿:網(wǎng)友

前言

眾所周知,app的一些功能可能會(huì)使用到H5開發(fā),這就難免會(huì)遇到j(luò)ava與js 的相互調(diào)用,android/98874.html">android/179948.html">android 利用WebViewJavascriptBridge 實(shí)現(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

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

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

android,js交互,與js交互,jsbridge

android,js交互,與js交互,jsbridge

依賴

項(xiàng)目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

另外放置兩個(gè)Button用于測(cè)試使用

<?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ù),同時(shí)提供打印信息

<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>

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

webview加載頁面

android,js交互,與js交互,jsbridge

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

button注冊(cè)監(jiān)聽

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

按鈕點(diǎn)擊事件,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注冊(cè)事件監(jiān)聽,接收數(shù)據(jù)

<script>  //注冊(cè)事件監(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)接收

android,js交互,與js交互,jsbridge

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

android,js交互,與js交互,jsbridge

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

js按鈕點(diǎn)擊事件, 同時(shí)需要上面WebViewJavascriptBridge的注冊(cè)監(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)接收

android,js交互,與js交互,jsbridge

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

android,js交互,與js交互,jsbridge

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

總結(jié)

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建瓯市| 平利县| 开封县| 阿克陶县| 蓝田县| 岳阳县| 瑞金市| 大连市| 靖西县| 民县| 屯门区| 邵阳县| 泾阳县| 肥乡县| 桐城市| 宣汉县| 宁蒗| 辽阳市| 竹山县| 聊城市| 三明市| 开封县| 腾冲县| 恩施市| 郧西县| 林西县| 乌兰浩特市| 林甸县| 安义县| 新昌县| 唐山市| 郴州市| 巩留县| 沂源县| 河池市| 余江县| 定兴县| 天津市| 敦煌市| 大荔县| 安远县|