美文网首页iOS 进阶
iOS UIWebView与JS交互

iOS UIWebView与JS交互

作者: YangSHP | 来源:发表于2019-05-24 11:15 被阅读3次

    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 <JavaScriptCore/JavaScriptCore.h>
    
    @protocol JSObjectProtocol <JSExport>
     
    /**
     获取用户信息(有返回值的)
     
     @param userId 用户ID
     */
    - (NSString *)getUserInfo; 
    
    /**
     分享(无返回值,有参数)
     
     @param jsonStr <#jsonStr description#>
     */
    - (void)share:(NSString *)jsonStr;
    
    @end
    
    @interface JSNativeMethod : NSObject<JSObjectProtocol>  
    
    @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交互

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