iOS UIWebView与JS交互

1.OC调用JS方法:

NSString *shareMethod = @"share('参数1')";
[_webView stringByEvaluatingJavaScriptFromString:shareMethod];

2.JS调用OC的方法:

js调用oc的方法分两种方式:
第一种方式——直接调用

-(void)webViewDidFinishLoad:(UIWebView *)webView  
{  
    //网页加载完成调用此方法  
    //创建JSContext 对象  
    JSContext *jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];   
    //js调用iOS  
    //第一种情况  
    //其中test1就是js的方法名称,赋给是一个block 里面是iOS代码  
    //此方法最终将打印出所有接收到的参数,js参数是不固定的
    jsContext[@"test1"] = ^() {  
        NSArray *args = [JSContext currentArguments];  
        for (id obj in args) {  
            NSLog(@"%@",obj);  
        }  
    };   
    //模拟一下OC调用JS,首先准备一下js代码,来调用js的函数test1 然后执行  
    //一个参数  
    NSString *jsTestStr = @"test1('参数1')";  
    [jsContext evaluateScript:jsTestStr];   
    //二个参数  
    NSString *jsTestStr1 = @"test1('参数1','参数2')";  
    [jsContext evaluateScript:jsTestStr1];   
} 

第二种方式——通过一个对象来调用方法
这种方式需要使用到JSExport协议
凡是遵守了JSExport协议的的协议所规定的方法就会对js开放,我们就可以通过js调用到这些方法或变量
首先:创建一个继承于NSObject的类:JSNativeMethod
其次:导入JavaScriptCore库,声明一个遵循于JSExport协议的协议,在这个协议里声明我们的交互方法,然后遵循于我们自定义的协议;
最后:在.m文件中实现相应的js交互方法。
具体实现实例如下:
JSNativeMethod.h文件

#import 

@protocol JSObjectProtocol 
 
/**
 获取用户信息(有返回值的)
 
 @param userId 用户ID
 */
- (NSString *)getUserInfo; 

/**
 分享(无返回值,有参数)
 
 @param jsonStr <#jsonStr description#>
 */
- (void)share:(NSString *)jsonStr;

@end

@interface JSNativeMethod : NSObject  

@end

JSNativeMethod.m文件


#import "JSNativeMethod.h" 
@implementation JSNativeMethod
 
#pragma mark - 获取用户信息
- (NSString *)getUserInfo {
    return @"userInfo";
} 
#pragma mark - 分享
- (void)share:(NSString *)jsonStr {
    DLog(@"分享:%@",jsonStr); 
} 
@end

你可能感兴趣的:(iOS UIWebView与JS交互)