设为首页 加入收藏

TOP

Hybrid APP基础篇(五)->JSBridge实现示例(四)
2017-10-11 15:24:32 】 浏览:8351
Tags:Hybrid APP 基础 -> JSBridge 实现 示例
ssageFromNative(%s);"; private String mPort; private WeakReference<WebView> mWebViewRef; public Callback(WebView view, String port) { mWebViewRef = new WeakReference<>(view); mPort = port; } public void apply(JSONObject jsonObject) throws JSONException { JSONObject object = new JSONObject(); object.put("responseId", mPort); object.putOpt("responseData", jsonObject); final String execJs = String.format(CALLBACK_JS_FORMAT, String.valueOf(object)); //如果activity已经关闭则不回调 if (mWebViewRef != null && mWebViewRef.get() != null && !((BaseWebLoader) mWebViewRef.get().getContext()).getActivity().isFinishing()) { mHandler.post(new Runnable() { @Override public void run() { mWebViewRef.get().loadUrl(execJs); } }); } } }

这个类的作用是,定义原生中的回调函数

Webview容器关键代码实现

实现代码如下

注册api方法

//定义api集合
JSBridge.register("namespace_bridge",BridgeImpl.class);				
			

捕获url scheme并执行方法的代码

public boolean shouldOverrideUrlLoading(WebView view, String url){
	//读取到url后通过callJava分析调用
	JSBridge.callJava(BaseWebLoader.this,view,url);
	
	//如果返回false,则WebView处理链接url,如果返回true,代表WebView根据程序来执行url
	return true;
}
					
			

里面的关键代码是注册函数,捕获url,执行方法等

API 类实现

实现代码如下

public class BridgeImpl implements IBridge {
	/**
     * 测试原生方法
     */
    public static void testNativeFunc(final BaseWebLoader webLoader, WebView wv, JSONObject param, final Callback callback) {
       //可以这样获取参数 param.optString(键值);
        //在一个新的线程内执行
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //执行一些自己的内容
                    JSONObject object = new JSONObject();
                    //添加测试信息
                    object.put("test", "test");
                    //执行回调
                    callback.apply(getJSONObject(1, "", object));
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}
			

这个类是一些api的具体实现,webview里面就是注册了这些对应的api

iOS实现部分

说明

这是iOS原生中配套的JSBridge实现代码。iOS中代码是基于UIWebview的,来源于一个github上的开源项目,地址 marcuswestin/WebViewjava scriptBridge

WebViewjava scriptBridgeBase 实现

实现代码如下

@implementation WebViewjava scriptBridgeBase {
    __weak id _webViewDelegate;
    long _uniqueId;
}

static bool logging = false;
static int logMaxLength = 500;

+ (void)enableLogging { logging = true; }
+ (void)setLogMaxLength:(int)length { logMaxLength = length;}

-(id)init {
    self = [super init];
    self.messageHandlers = [NSMutableDictionary dictionary];
    self.startupMessageQueue = [NSMutableArray array];
    self.responseCallbacks = [NSMutableDictionary dictionary];
    _uniqueId = 0;
    return(self);
}

- (void)dealloc {
    self.startupMessageQueue = nil;
    self.responseCallbacks = nil;
    self.messageHandlers = nil;
}

- (void)reset {
    self.startupMessageQueue = [NSMutableArray array];
    self.responseCallbacks = [NSMutableDictionary dictionary];
    _uniqueId = 0;
}

- (void)sendData:(id)data responseCallback:(WVJBResponseCallback)responseCallback handlerName:(NSString*)handlerName {
    NSMutableDictionary* message = [NSMutableDictionary dictionary];
    
    if (data) {
        message[@"data"] = data;
    }
    
    if (responseCallback) {
        NSString* callbackId = [NSString stringWithFormat:@"objc_cb_%ld", ++_uniqueId];
        self.responseCallbacks[callbackId] = [responseCallback
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇全球首个实战类微信小程序开发教程 下一篇微信小程序组件scroll-view

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目