之前公司在写混合式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简单使用就是这样了