当前位置:   article > 正文

Android JS 通过JSBridge(BridgeWebView)相互调用详解_com.github.lzyzsd.jsbridge.bridgewebview

com.github.lzyzsd.jsbridge.bridgewebview

一.JSBridge GitHub链接

 

https://github.com/lzyzsd/JsBridge

 

 

 

 

 

 

 

二.AndroidStudio配置JsBridge

 

1.根目录Gradle配置

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

 

 

 

2.主目录Gradle配置

implementation 'com.github.lzyzsd:jsbridge:1.0.4'

 

 

 

 

 

 

三.代码说明 Android JS 通过JSBridge交互

 

1.将需要调用的JS代码以.html格式放到src/main/assets文件夹里

 

 

 

2.lll.html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Test</title>
  8. </head>
  9. <body>
  10. <div class="input-field col s6">
  11. <input placeholder="请输入数据" id="text1" type="text" class="validate">
  12. </div>
  13. <button type="button" id="button1" onclick="testClick()">JS调用Android 协议好的方法</button>
  14. <button type="button" id="button2" onclick="testClick2()">JS调用Android 默认</button>
  15. </body>
  16. <script>
  17. //JS调用Android方法:接收Android传递过来的数据,并做处理
  18. function testClick() {
  19. //参数一:调用java中的方法 submitFromWeb是方法名,必须和Android中注册时候的方法名称保持一致
  20. //参数二:返回给Android端的数据,可以为字符串,json等信息
  21. //参数三:js接收到Android传递过来的数据之后的相应处理逻辑
  22. window.WebViewJavascriptBridge.callHandler(
  23. 'submitFromWeb'
  24. , {'param': "Android你好,这是我JS传递给你的数据呀!!!"}
  25. , function(responseData) {
  26. alert("JS接收到Android数据弹JS对话框:"+responseData)
  27. }
  28. );
  29. }
  30. //JS调用Android方法:接收Android传递过来的数据,并做处理 默认
  31. function testClick2() {
  32. var data2 = 'JS调用Android方法:接收Android传递过来的数据,并做处理 默认';
  33. //参数一:调用java中的方法 submitFromWeb是方法名,必须和Android中注册时候的方法名称保持一致
  34. //参数二:返回给Android端的数据,可以为字符串,json等信息
  35. //参数三:js接收到Android传递过来的数据之后的相应处理逻辑
  36. window.WebViewJavascriptBridge.send(
  37. data2,
  38. function(responseData){
  39. //java中DefaultHandler所实现的方法中callback所定义的入参
  40. alert(responseData);
  41. });
  42. }
  43. //自定义JS注册事件监听 connectWebViewJavascriptBridge 方法名可改
  44. function connectWebViewJavascriptBridge(callback) {
  45. if (window.WebViewJavascriptBridge) {
  46. callback(WebViewJavascriptBridge)
  47. } else {
  48. document.addEventListener(
  49. 'WebViewJavascriptBridgeReady'
  50. , function() {
  51. callback(WebViewJavascriptBridge)
  52. },
  53. false
  54. );
  55. }
  56. }
  57. //注册回调函数,第一次连接时调用 初始化函数 connectWebViewJavascriptBridge和上面一致
  58. connectWebViewJavascriptBridge(function(bridge) {
  59. //初始化 必须有 Android 通过 JSBridge 调用 默认JS bridge.init bridgeWebView.send调用
  60. bridge.init(function(message, responseCallback) {
  61. var data = {
  62. 'Javascript Responds': 'Android调用JS初始化方法!'
  63. };
  64. responseCallback(data);
  65. });
  66. //Android调用js方法:functionInJs方法名称需要保持一致 ,并返回给Android通知
  67. bridge.registerHandler("functionInJs", function(data, responseCallback) {
  68. alert("JS接收到Android数据弹JS对话框:"+data);
  69. var data2 = document.getElementById("text1").value;
  70. var responseData =data2;
  71. responseCallback(responseData);
  72. });
  73. //Android调用js方法:functionInJs方法名称需要保持一致 ,并返回给Android通知
  74. bridge.registerHandler("functionInJs111", function(data, responseCallback) {
  75. alert("JS接收到Android数据弹JS对话框111:"+data);
  76. var data2 = "dddddddddddddddddddddddddddddddddd";
  77. var responseData =data2;
  78. responseCallback(responseData);
  79. });
  80. })
  81. </script>
  82. </html>

 

 

 

3.Android代码

  1. package com.wjn.customwebviewjs;
  2. import android.content.DialogInterface;
  3. import android.os.Bundle;
  4. import android.support.v7.app.AlertDialog;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.webkit.JsResult;
  8. import android.webkit.WebChromeClient;
  9. import android.webkit.WebView;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. import com.github.lzyzsd.jsbridge.BridgeHandler;
  13. import com.github.lzyzsd.jsbridge.BridgeWebView;
  14. import com.github.lzyzsd.jsbridge.CallBackFunction;
  15. import com.github.lzyzsd.jsbridge.DefaultHandler;
  16. public class JsBridgeActivity extends AppCompatActivity {
  17. private TextView textView;
  18. private TextView textView111;
  19. private TextView textView2;
  20. private BridgeWebView bridgeWebView;
  21. @Override
  22. protected void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. setContentView(R.layout.activity_jsbridge);
  25. initView();
  26. }
  27. /**
  28. * 初始化各种View
  29. */
  30. private void initView() {
  31. textView=findViewById(R.id.activity_jsbridge_textview1);
  32. textView111=findViewById(R.id.activity_jsbridge_textview111);
  33. textView2=findViewById(R.id.activity_jsbridge_textview2);
  34. bridgeWebView=findViewById(R.id.activity_jsbridge_bridgewebview);
  35. bridgeWebView.setWebChromeClient(new myWebChromeClient());
  36. bridgeWebView.loadUrl("file:///android_asset/lll.html");
  37. //Android 通过 JSBridge 调用 JS
  38. textView.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. /**
  42. * callHandler方法 Android 调用JS
  43. * 参数1 handlerName:JS中规定的方法 Android JS 关于该方法名要一致
  44. * 参数2 data:Android传递给JS的参数
  45. * 参数3 callBack:回调 JS返回给Android的返回值
  46. * */
  47. bridgeWebView.callHandler("functionInJs", "JS你好,这是我Android传递给你的数据呀!!!", new CallBackFunction() {
  48. @Override
  49. public void onCallBack(String data) {
  50. Toast.makeText(JsBridgeActivity.this, data, Toast.LENGTH_LONG).show();
  51. }
  52. });
  53. }
  54. });
  55. //Android 通过 JSBridge 调用 JS 111
  56. textView111.setOnClickListener(new View.OnClickListener() {
  57. @Override
  58. public void onClick(View v) {
  59. bridgeWebView.callHandler("functionInJs111", "JS你好,这是我Android传递给你的数据呀!!!111", new CallBackFunction() {
  60. @Override
  61. public void onCallBack(String data) {
  62. Toast.makeText(JsBridgeActivity.this, data, Toast.LENGTH_LONG).show();
  63. }
  64. });
  65. }
  66. });
  67. //JS 通过 JSBridge 调用 Android
  68. bridgeWebView.registerHandler("submitFromWeb", new BridgeHandler() {
  69. @Override
  70. public void handler(String data, CallBackFunction function) {
  71. //JS传递给Android
  72. Toast.makeText(JsBridgeActivity.this, data, Toast.LENGTH_LONG).show();
  73. //Android返回给JS的消息
  74. function.onCallBack("JS你好,这是我Android传递给你的数据呀!!!");
  75. }
  76. });
  77. //Android 通过 JSBridge 调用 默认JS bridge.init (不需要配置handlerName)
  78. textView2.setOnClickListener(new View.OnClickListener() {
  79. @Override
  80. public void onClick(View v) {
  81. bridgeWebView.send("Android端通过调用JS默认方法,传递给JS的参数", new CallBackFunction() {
  82. @Override
  83. public void onCallBack(String data) {
  84. //JS传递给Android
  85. Toast.makeText(JsBridgeActivity.this, data, Toast.LENGTH_LONG).show();
  86. }
  87. });
  88. }
  89. });
  90. //JS 通过 JSBridge 调用 Android默认
  91. bridgeWebView.setDefaultHandler(new DefaultHandler(){
  92. @Override
  93. public void handler(String data, CallBackFunction function) {
  94. super.handler(data, function);
  95. Toast.makeText(JsBridgeActivity.this, data, Toast.LENGTH_SHORT).show();
  96. function.onCallBack("JS 通过 JSBridge 调用 Android默认");
  97. }
  98. });
  99. }
  100. /**
  101. * WebChromeClient 实现类
  102. * */
  103. public class myWebChromeClient extends WebChromeClient{
  104. @Override
  105. public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
  106. //创建一个Builder来显示网页中的对话框
  107. new AlertDialog.Builder(JsBridgeActivity.this)
  108. .setTitle("Alert对话框")
  109. .setMessage(message)
  110. .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  111. @Override
  112. public void onClick(DialogInterface dialog, int which) {
  113. result.confirm();
  114. }
  115. }).setCancelable(false).show();
  116. return true;
  117. }
  118. }
  119. }

 

 

4.结果

Android 调用JS

 

 

Android 调用JS 111

 

 

 

 

Android 调用JS默认

 

 

JS调用Android

 

 

JS调用Android默认

 

 

 

 

附:代码下载:https://github.com/wujianning/CustomWebViewJS

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/561981
推荐阅读
相关标签
  

闽ICP备14008679号