iOS开发中OC与JS的交互

作者: 不疯魔难以成佛 | 来源:发表于2016-08-11 23:34 被阅读0次

<pre><code>

import "ViewController.h"

import <JavaScriptCore/JavaScriptCore.h>

@interface ViewController ()<UIWebViewDelegate>
@property(nonatomic,strong) JSContext *jsContext;
@property(nonatomic,strong)UIWebView *web;
@end

@implementation ViewController

-(void)viewDidLoad {

[super viewDidLoad];
//设置代理

self.web.delegate = self;

[self checkWebCart];

}

-(void)loadWebView:(NSString *)strUrl
{

if (strUrl) {

NSURL *weburl = [NSURL URLWithString:@"url"];

NSURLRequest *request =[NSURLRequest requestWithURL:weburl];

[self.web loadRequest:request];

}

}

-(void)webViewDidFinishLoad:(UIWebView *)webView
{

//创建JSContext 对象(此处通过当前webView的键获取到jscontext)

self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];


//js调用iOS
//js的方法名称,赋给是一个block 里面是iOS代码,方法名(networkSetFinished)h5人员提供
//没参数就为空,可以获取到JS传过来的值
self.jsContext[@"networkSetFinished"] = ^(int state,NSString * msg) {
    
    // 主线程执行:
    dispatch_async(dispatch_get_main_queue(), ^{
        
    });
    
};

//点击web页面按钮的响应
self.jsContext[@"NotifyCart"] = ^(NSString * state) {
    
    NSLog(@"main:%d",[state intValue]);
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyCart" 

object:[NSString stringWithFormat:@"%d", [state intValue]]];

};

}

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:

(UIWebViewNavigationType)navigationType{

//判断是否单击,页面的点击进行拦截,返回NO即拦截
if (navigationType == UIWebViewNavigationTypeLinkClicked){
//判断点击响应的URL路径是否包含该方法名
    if ([[request.URL path] containsString:@"/ChouJiang/"]){
    //进行局部点击跳转
        return NO;
    }
    
    
    //在这里可以获取对应的URL 进行页面跳转加载   request.URL 如
    UIViewController *vc = [[UIViewController alloc]init];
    [self.navigationController pushViewController:vc animated:YES];
    return NO;
    
}

return YES;

}

//传值给web

-(void)checkWebCart
{

NSString * checkWebCart =[NSString stringWithFormat:@"appJumpToCar()"]; //准备执行的js代码

self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
    context.exception = exceptionValue;
    NSLog(@"异常信息:%@", exceptionValue);
};
//传值一般利用到了 stringByEvaluatingJavaScriptFromString
[self.web stringByEvaluatingJavaScriptFromString:checkWebCart];

}

@end

相关文章

网友评论

    本文标题:iOS开发中OC与JS的交互

    本文链接:https://www.haomeiwen.com/subject/ohvssttx.html