iOS关于H5和原生页面交互

H5页面调用原生页面,首选JavaScriptCoreJSContext搭配JSExport

- (void)setupJsContent
{
    //获取当前JS环境
    JSContext *_content = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    // 打印异常
    _content.exceptionHandler =
    ^(JSContext *context, JSValue *exceptionValue)
    {
        context.exception = exceptionValue;
        NSLog(@"exceptionValue is %@", exceptionValue);
    };
    YongLian *yonglian = [[YongLian alloc] init];
    _content[@"YongLian"] = yonglian;
    yonglian.jsContext = _content;
}

其中YongLian这个类的.h文件:

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
NS_ASSUME_NONNULL_BEGIN
@protocol JavaScriptCoreOCDelegate <JSExport>

-(void)user_login:(NSString *)user_login;
-(void)chat_list:(NSString *)chat_list;
-(void)chat_user:(NSString *)chat_user;
-(void)onImage:(NSNumber*)index clicked:(NSString*)urls;
@end
typedef void(^YongLianImageClickBlock)(NSNumber*,NSArray*);
@interface YongLian : NSObject<JavaScriptCoreOCDelegate>
@property (nonatomic, weak) JSContext *jsContext;
//@property (nonatomic, strong) UIWebView *webView;
@property (nonatomic, copy) YongLianImageClickBlock imageClickBlock;
@end

NS_ASSUME_NONNULL_END

.m文件:

- (void)user_login:(NSString *)user_login{
    NSLog(@"user login");
    dispatch_async(dispatch_get_main_queue(), ^{
        UserInfoSingleton *userInfo = [UserInfoSingleton defaultUserInfo];
        LoginViewController_1 *loginVC = [LoginViewController_1 new];
        UINavigationController *nav4 = [[WKNavigationController alloc]initWithRootViewController:loginVC];
        if (!userInfo.login) {
            [[WKVCTools getCurrentVC].navigationController presentViewController:nav4 animated:true completion:nil];
        }
    });
    
}

尤其需要注意的是,当我们在JS中是两个参数的时候,例如这里的-(void)onImage:(NSNumber*)index clicked:(NSString*)urls方法,在JS中是这样的:

YongLian.onImageClicked(index,urls);

这个时候OC中的方法名字,就需要是onImage:Clicked也就是冒号去掉之后和JS方法名完全一致才行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值