只要是好东西,都应该主动分享出来,让大家都用起来;鼓励开源,大家一起,为积累更多更好的东西而奋斗!

Android组件:TbWebViewActivity(TbWebView)

关闭WebView点击展开

一、接口功能

支持url参数方式关闭webview、支持javascript interface方式关闭webview

二、示例

1、通过javascript interface方式关闭webview
RD代码:
                // 直接调用startActivity方法即可
                TbWebViewActivity.startActivity(mContext,
                    "http://www.baidu.com",
                    null,   // null表示不需要cookie
                    null);  // null表示不额外增加js接口,和系统组件保持一致,将接口加在TbJsBridge下
                
FE代码:
                // FE通过如下代码即可调用客户端开放的js interface
                var closePage = function(){
                    if(window.TbJsBridge && typeof TbJsBridge === 'function') {
                        TbJsBridge.closePage("我来自FE的自定义消息!");
                    }
                };
                
2、通过url参数的方式来关闭webview
FE代码:
                    
                    <a href="?jump=closewebview">url参数:关闭页面</a>
                

在WebView中携带cookie点击展开

一、接口功能

可以将客户端的cookie同步到WebView中,保证客户端和WebView页面能进行正常的数据通信

二、示例

假设是要在baidu.com和google.com两个域下同步cookie,则可以这样来做:
                // 创建需要同步的cookie信息
                HashMap<String, String> cookieMap = new HashMap<String, String>();
                cookieMap.put("baidu.com", "uname=zxlie;timestamp=20140219");
                cookieMap.put("google.com", "uname=zxlie;timestamp=20140219");

                TbWebViewActivity.startActivity(mContext,
                    "http://www.baidu.com",
                    cookieMap,       // 传递cookie信息
                    null);           // 不需要额外的js interface
                

自定义Javascript Interface(window.TbJsBridge)点击展开

一、接口功能

为WebView增加Javascript Interface的支持,使得FE可以在web页面通过window.TbJsBridge这个API来调用客户端的接口

二、示例

假设需要给WebView提供一个获取当前网络类型的js接口,比如:TbJsBridge.getNetWorkType(), 要求此接口根据实际情况返回2G、3G、WIFI。
RD代码:
                // 在TbJsBridge.java类中增加这样的方法即可:
                public String getNetWorkType() {
                    String networkType = "";

                    // TODO:获取网络类型的java代码,在这里写,并保存到networkType变量中

                    return networkType;
                }

                /*************************************************************/

                // 然后RD调用startActivity方法直接调起WebView即可:
                TbWebViewActivity.startActivity(mContext,
                    "http://www.baidu.com",
                    null,   // null表示不需要cookie
                    null);  // null表示不额外增加js接口,和系统组件保持一致,将接口加在TbJsBridge下
                
FE代码:
                // FE通过如下代码即可调用客户端开放的js interface
                var getNetWorkType = function(){
                    if(window.TbJsBridge && typeof TbJsBridge === 'function') {
                        // 获取当前网络状态
                        var currentNetWorkType = TbJsBridge.getNetWorkType();
                    }
                };
                

自定义Javascript Interface(非window.TbJsBridge)点击展开

一、接口功能

功能同上,只是开放给FE的接口,不是window.TbJsBridge,而是根据实际情况而定的,比如:window.FaceJsBridge

二、示例

假设需要给WebView提供一个购买表情的js接口,比如: 根据一个表情ID,购买一个表情:FaceJsBridge.buy('139085613')。
RD代码:
1)、新定义一个FaceJsBridge.java文件,并在其中增加buy接口:
                // 在FaceJsBridge.java类中增加这样的方法即可:
                public void buy(String faceID) { /* your code */ }
                
2)、在proguard.cfg中增加配置,禁止FaceJsBridge类中的接口被混淆
                -keep public class com.baidu.tieba.util.FaceJsBridge { *;}
                
3)、调用如下接口
                // 在FaceJsBridge.java类中增加这样的方法即可:
                HashMap<String, JavascriptInterface> mJsInterfaces = new HashMap<String, JavascriptInterface>();
                mJsInterfaces.put("FaceJsBridge", new JavascriptInterface() {
                        @Override
                        public Object createJsInterface(Activity activity) {
                            return new FaceJsBridge(activity);  // 注意这里return的对象
                        }
                    });

                TbWebViewActivity.startActivity(mContext,
                    "http://www.baidu.com",
                    null,            // null表示不需要cookie
                    mJsInterfaces);  // 传入新的jsInterface
                
FE代码:
                // FE通过如下代码即可调用客户端开放的js interface
                var buyFace = function(faceId){
                    if(window.FaceJsBridge && typeof FaceJsBridge === 'function') {
                        FaceJsBridge.buy(faceID);
                    }
                };