天天看点

BridgeWebView的简单使用,自动调用js的代码

之前公司在写混合式Android开发,刚摸索出来js+webview的使用,老大说js原生的安全性不高,建议我用BridgeWebView+BridgeWebViewjs,这是我自己一些示例代码,我自己是ok的,被这个BridgeWebView的BridgeWebViewClient坑了

package com.baoyuan.fragment.Second.Property;


import android.content.Context;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;

import com.baoyuan.R;
import com.baoyuan.fragment.BaseFragment1;
import com.github.lzyzsd.jsbridge.BridgeHandler;
import com.github.lzyzsd.jsbridge.BridgeWebView;
import com.github.lzyzsd.jsbridge.BridgeWebViewClient;
import com.github.lzyzsd.jsbridge.CallBackFunction;


public class WebPropertyFragment extends BaseFragment1 implements View.OnClickListener{

    private static  final  String TAG=WebPropertyFragment.class.getSimpleName();
    private BridgeWebView mBridgeWebView;
    private Context mActivity;
    private Button to_web_default;

    public WebPropertyFragment() {
        // Required empty public constructor
    }


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View briegeView = inflater.inflate(R.layout.fragment_web_property, null);
        mActivity = getActivity();
        mBridgeWebView=(BridgeWebView)briegeView.findViewById(R.id.test_bridge_webView);
        mBridgeWebView.loadUrl("http://10.55.88.70:8080/BYhtml5/BrigeWebView.html");
        to_web_default= (Button) briegeView.findViewById(R.id.to_web_default);
        to_web_default.setOnClickListener(this);
        initViews();

        return briegeView;
    }

    @Override
    public void onHandleMessage(Message msg) {

    }


    private void  initViews(){

        mBridgeWebView.setWebViewClient(new MyWebViewClient(mBridgeWebView));

        mBridgeWebView.setDefaultHandler(new BridgeHandler() {
            @Override
            public void handler(String data, CallBackFunction function) {
                Log.e(TAG, "DefaultHandler接收全部来自web的数据:"+data);
                function.onCallBack("DefaultHandler收到Web发来的数据,回传数据给你");
            }
        });

        //必须和js同名函数,注册具体执行函数,类似java实现类。
        //第一参数是订阅的java本地函数名字 第二个参数是回调Handler , 参数返回js请求的resqustData,function.onCallBack()回调到js,调用function(responseData)
        mBridgeWebView.registerHandler("submitFromWeb", new BridgeHandler() {

            @Override
            public void handler(String data, CallBackFunction function) {
                Log.e(TAG, "指定Handler接收来自web的数据:" + data);
                function.onCallBack("指定Handler收到Web发来的数据,回传数据给你");
            }
        });


    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){      
//点击
            case R.id.to_web_default:
                mBridgeWebView.send("aaa",new CallBackFunction(){
                    @Override
                    public void onCallBack(String data) {
                        Log.e(TAG, "来自web的回传数据:" + data);
                    }
                });
                break;
        }
    }


    class MyWebViewClient extends BridgeWebViewClient {

        public MyWebViewClient(BridgeWebView webView) {
            super(webView);
        }

	//网页加载完成
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.e(TAG,"onPageFinished");
            mBridgeWebView.callHandler("functionInJs","bbb",new CallBackFunction(){
                @Override
                public void onCallBack(String data) {
                    Log.e(TAG, "来自web的回传数据:" + data);
                }
            });
        }
    }

}

这是我的ANDROID端代码      
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    >

    <com.github.lzyzsd.jsbridge.BridgeWebView
        android:id="@+id/test_bridge_webView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>
    <Button
        android:id="@+id/to_web_default"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:text="默认传递数据给Web"
        android:layout_height="wrap_content"/>
</LinearLayout>
      
这是Layout      
希望对你们有帮助,有问题可以私信我,Android代码里我写两种方式,一种是按钮点击触发,一个是网页加载完成后发的      
那个Android里面要配置的      
好啦,整个BridgeWebView简单使用就是这样了      

继续阅读