美文网首页
【Android开发】JsBridge的使用

【Android开发】JsBridge的使用

作者: SiriusYu | 来源:发表于2017-06-30 01:09 被阅读319次

    配置

    repositories {
        // ...
        maven { url "https://jitpack.io" }
    }
    
    dependencies {
        compile 'com.github.lzyzsd:jsbridge:1.0.4'
    }
    

    Activity代码

    public class MainActivity extends BaseActivity {
    
        BridgeWebView bridgeWebView;
        Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_js_bridge);
    
            getSupportActionBar().setTitle("JsBridge_test");
    
            button = (Button) findViewById(R.id.button3);
    
            bridgeWebView = (BridgeWebView) findViewById(R.id.JsBridgeWebView);
    
            bridgeWebView.setDefaultHandler(new DefaultHandler());
    
            bridgeWebView.setWebChromeClient(new WebChromeClient());
    
            bridgeWebView.setWebViewClient( new MyWebViewClient(bridgeWebView));
    
            bridgeWebView.loadUrl("file:///android_asset/test.html");
    
    
          
            bridgeWebView.registerHandler("submitFromWeb", new BridgeHandler() {
                @Override
                public void handler(String data, CallBackFunction function) {
                    showToast(data);
                    function.onCallBack( "返回给Toast的alert");
                }
            });
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    bridgeWebView.callHandler("functionInJs", "调用js的方法", new CallBackFunction() {
    
                        @Override
                        public void onCallBack(String data) {
    
                            showToast("==="  + data);
                        }
                    });
                }
            });
    
        }
    
        public void showToast (String msg){
            Toast.makeText(this,msg, Toast.LENGTH_SHORT).show();
        }
    
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <com.github.lzyzsd.jsbridge.BridgeWebView
            android:id="@+id/JsBridgeWebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
        </com.github.lzyzsd.jsbridge.BridgeWebView>
    
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="給Html发送消息并返回消息"
            android:id="@+id/button3"
            android:background="#266161"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
    
    </RelativeLayout>
    
    

    html

    <html>
            <head>
                    <meta content="text/html; charset=utf-8" http-equiv="content-type">
                    <title>js调用java</title>
            </head>
            <body>
            <p>
                <input type="text" id="text1" value="调用安卓的Toast方法"/>
            </p>
            <p>
                <input type="button" id="enter" value="调用安卓的方法" onclick="testClick();"
                />
            </p>
    
            <script>
    
             function testClick() {
               var data = document.getElementById("text1").value;
                window.WebViewJavascriptBridge.callHandler(
                   'submitFromWeb'
                   , {'param': data}
                   , function(responseData) {
                        alert(responseData)
                   }
               );
           }
    
           function connectWebViewJavascriptBridge(callback) {
               if (window.WebViewJavascriptBridge) {
                   callback(WebViewJavascriptBridge)
               } else {
                   document.addEventListener(
                       'WebViewJavascriptBridgeReady'
                       , function() {
                           callback(WebViewJavascriptBridge)
                       },
                       false
                   );
               }
           }
    
           connectWebViewJavascriptBridge(function(bridge) {
               bridge.init(function(message, responseCallback) {
                   var data = {
                       'Javascript Responds': 'Wee!'
                   };
                   responseCallback(data);
               });
    
               bridge.registerHandler("functionInJs", function(data, responseCallback) {
                    alert(data);
                   var responseData = "我接受到了安卓的调用";
                   responseCallback(responseData);
               });
           })
    
        </script>
    
            </body>
    </html>
    

    结果

    参考文章:
    Android JSBridge的原理与实现
    Android JsBridge实战 打造专属你的Hybrid APP

    相关文章

      网友评论

          本文标题:【Android开发】JsBridge的使用

          本文链接:https://www.haomeiwen.com/subject/hozvcxtx.html