iOS与H5混合开发

2020-01-17  本文已影响0人  percivals

iOS编程中,H5混合开发一般会视同UIWebView或者WKWebview完成网页加载,针对这两者,有以下几种交互方式

1.WebViewJavascriptBridge 库(适用于UIWebView及WKWebview)

下载第三方库,并完成集成

与H5协商方法名,并定义数据交互规则

_bridge = [WebViewJavascriptBridge bridgeForWebView:self.wkWebView];

    [_bridge setWebViewDelegate:self];
    
    //"iOSBridge"为协商确定的方法名
    [_bridge registerHandler:@"iOSBridge" handler:^(id data, WVJBResponseCallback responseCallback) {
    
    }];

2.在webview代理方法中监听url,进行字段分析获取想要的数据 (适用于UIWebView及WKWebview)

WKWebview中

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation

对webView.URL.absoluteString进行解析

此方法较为简单,适用场景不广,用于可直接通过网址信息字段判断处理逻辑的地方

3.webview自带交互方法

WKWebview中,通过注册监听完成交互

//1.注册
[self.wkWebView.configuration.userContentController addScriptMessageHandler:self name:@"back"];

//2.监听处理
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
    if ([message.name isEqualToString:@"back"]) {
        NSDictionary * messageDict = (NSDictionary *)message.body;
    }
}

//3.释放
[self.wkWebView.configuration.userContentController removeScriptMessageHandlerForName:@"back"];

UIWebview中,通过jsContext完成交互

//获取JS代码的执行环境/上下文/作用域
    self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//! 在context注册iOSDelegate对象为self
    self.jsContext[@"mesc"] = self;//注意循环引用问题
    self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
        context.exception = exceptionValue;
        NSLog(@"异常信息:%@", exceptionValue);
    };
    self.jsContext[@"console"][@"log"] = ^(JSValue * msg) {
        NSLog(@"H5  log : %@", msg);
    };
上一篇下一篇

猜你喜欢

热点阅读