利用 JavaScriptCore 进行 native APP 和 H5 的交互

调用 H5 页面里的JS 方法 
附上部分代码。已做后记。

#import <UIKit/UIKit.h>
#import <JavaScriptCore/JavaScriptCore.h>

@protocol TestJSExport <NSObject>

@end

@interface LYWebCarMasterController : UIViewController<TestJSExport,UIWebViewDelegate,UIActionSheetDelegate,UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@property (strong, nonatomic) JSContext *context;
//上传时间的字符串
@property (nonatomic, strong)NSString * timeStr;


@end

//创建web 加载本地的HTML文件
    self.webview =[[UIWebView alloc] initWithFrame:self.view.frame];
    NSString *path = [[[NSBundle mainBundle] bundlePath]  stringByAppendingPathComponent:@"index6.html"];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
    self.webview.delegate =self;
    [self.webview loadRequest:request];
    
    [self.view addSubview:self.webview];
    
    //在 webviewdelegate 的里面去获取JS方法。
#pragma mark webviewdelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // Undocumented access to UIWebView's JSContext
     self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    // 以 JSExport 协议关联 native 的方法
    self.context[@"native"] = self;

//调取JS 方法chooseJudge 通过block 利用JSValue 获取参数

        self.context[@"HtmlcallOc"] = ^() {
            NSArray * args = [JSContext currentArguments];
            for (JSValue *jsVal in args) {
                NSLog(@"%@", jsVal);
                //你自己的代码
                ——————---code ---————————
                
            }

        
        };

}

------部分 js code------

for(var i=0;i<getImgDiv.length;i++){
				indexID = i;
				
				getImgDiv[i].setAttribute("id", "getImg"+indexID);
			    getImgDiv[i].onclick = function showHtmlcallJava2(obj){
				   var _thisid = this.id;
                  //调用判断
                      if (/android/i.test(navigator.userAgent)) {
                          window.jsObj.HtmlcallJava2(thisID, status1);
                          alert(status1);
                      } else if (/ipad|iphone|mac/i.test(navigator.userAgent)) {
                          HtmlcallOc(_thisid, "status2");
                          alert(status1);
                      }
                }
				  
}

 //告诉js 的东西。
        JSValue * function = [self.context objectForKeyedSubscript:@"showFromObject"];
        //将信息回调返回给js==图片地址 + 图片id
        [function callWithArguments:@[@"978",@"567"]];


你可能感兴趣的:(利用 JavaScriptCore 进行 native APP 和 H5 的交互)