UIWebView与H5的交互

从iOS7之后,苹果公司就提供JavaScriptCore.framework开发库,用于支持H5与Native的交互。最近研究一下,网络上也有很多的开发用于支持UIWebView与H5的交互的开发库,例如:WebViewJavaScriptBridge。还有一个关于JS与Native交互的开发库:JSPatch;在这里不对他们做阐述,我主要阐述一下“H5代码如何与上层的Native交互”。

主要就是采用JavaScriptCore.framework,关于这个开发库的使用,大家可以百度一下。
直接上代码吧:

//
//  WebViewJSPatch.m
//  CommonProject
//
//  Created by wuyoujian on 16/6/30.
//  Copyright © 2016年 wuyoujian. All rights reserved.
//

#import "WebViewJSPatch.h"

static NSString *const jsContextKeyPath =@"documentView.webView.mainFrame.javaScriptContext";

@implementation WebViewJSPatch

/**
 *  向webview中注册js调用Native的api
 *  @param webView 对应的WebView
 *  @param apiName 对应的js的function名称
 *  @param apiBlock 对应的Native的实现block
 */

+ (void)registNativeAPIInWebView:(UIWebView*)webView apiName:(NSString*)apiName apiBlock:(WebViewJSPatchBlock)apiBlock {

    JSContext *context = [webViewvalueForKeyPath:jsContextKeyPath];
    if (context && [contextisKindOfClass:[JSContextclass]]) {
        context[apiName] = ^() {

            NSArray *args = [JSContextcurrentArguments];
            for (JSValue *jsValin args) { NSLog(@"%@", jsVal.toString);}

            dispatch_async(dispatch_get_main_queue(), ^{
                //
                if (apiBlock) {
                    apiBlock(args);
                }
            });
        };
    }
}


/**
 *  在webView中执行js
 *  @param webView 对应的WebView
 *  @param script 需要执行的js代码
 */

+ (JSValue*)evaluateScriptWebView:(UIWebView*)webView script:(NSString*)script {
    JSContext *context = [webViewvalueForKeyPath:jsContextKeyPath];

    if (context && [contextisKindOfClass:[JSContextclass]]) {
        return [contextevaluateScript:script];
    }

    returnnil;
}

@end

使用方法:

1、js调用Native(即H5调用Native API)

可以直接在UIWebView初始化完成之后,调用WebViewJSPatch类方法registNativeAPIInWebView注册js需要调用的Native的方法,本质上是注册一个block;

2、Native调用js

这个有两种方式,UIWebView本身提供:stringByEvaluatingJavaScriptFromString 方法,在这里我们采用JSContext方式来调用js;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值