WKWebView简单使用(OC)

- (void)initWKWebView
{
//创建并配置WKWebView的相关参数
//1.WKWebViewConfiguration:是WKWebView初始化时的配置类,里面存放着初始化WK的一系列属性;
//2.WKUserContentController:为JS提供了一个发送消息的通道并且可以向页面注入JS的类,WKUserContentController对象可以添加多个scriptMessageHandler;
//3.addScriptMessageHandler:name:有两个参数,第一个参数是userContentController的代理对象,第二个参数是JS里发送postMessage的对象。添加一个脚本消息的处理器,同时需要在JS中添加,window.webkit.messageHandlers..postMessage()才能起作用。
//以下都属于初始化基本设置
WKWebViewConfiguration*configuration = [[WKWebViewConfigurationalloc]init];

WKUserContentController*userContentController = [[WKUserContentControlleralloc]init];

//getUserid 和js 约定的对象名
[userContentControlleraddScriptMessageHandler:selfname:@"getUserid"];

configuration.userContentController= userContentController;

WKPreferences*preferences = [WKPreferencesnew];

preferences.javaScriptCanOpenWindowsAutomatically=YES;

preferences.minimumFontSize=40.0;

configuration.preferences= preferences;

//在交互的时候出现问题,xcode会报错  一定要注意 在创建了wkwebView的时候  configuration:configuration
self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration];

//设置访问的URL

NSURL*url = [NSURLURLWithString:@"http://2thewin.com/Home/Comment/index.html?matchid=1"];

//根据URL创建请求

NSURLRequest*request = [NSURLRequestrequestWithURL:url];

// WKWebView加载请求

[self.webViewloadRequest:request];

self.webView.UIDelegate=self;

self.webView.backgroundColor= [UIColorgreenColor];

[self.viewaddSubview:self.webView];
}

加载本地的html

   //loadFileURL方法通常用于加载服务器的HTML页面或者JS,而loadHTMLString通常用于加载本地HTML或者JS
//这里要特别注意的是 当你加载本地的html资源的时候,如果不是单一的html文件,包含css,js等多个资源,可以将他们放在一个文件夹,然后拖进xcode的时候选择,Create folder referreferences,生成蓝色的资源包的那个

//如果是单一的文件的话不需要inDirectory这个参数   文件的的话参数跟的是文件夹的名字
    NSString *htmlPath = [[NSBundle mainBundle]pathForResource:@"index" ofType:@"html" inDirectory:@"assets"];
    NSString *appHtml = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
    NSURL *baseUrl = [NSURL fileURLWithPath:htmlPath];
    [webView loadHTMLString:appHtml baseURL:baseUrl];

   [self.webView loadHTMLString:fileURL baseURL:baseURL];

JS调用Native

  • 首先OC和安卓有出入 OC需要在JS加入以下代码
//getUserid就是和JS约定的对象名
//postMessage JS执行传给OC的消息(json格式)
window.webkit.messageHandlers.getUserid.postMessage({"UserId":"99"});
  • 当JS调用本地的时候会触发OC的协议方法

    //JS 调用 OC 时 webview 会调用此方法
    //@param userContentController webview中配置的userContentController 信息
    @param message JS执行传递的消息

//@param userContentController  webview中配置的userContentController 信息 ,在初始化的时候配置
//@param message       JS执行传递的消息(json)
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
    NSLog(@"body:%@",message.body);
  NSLog(@"body:%@",message.name);
[self method];
}

OC向JS传值

- (void)method{
//这里一定要注意向JS传递数据的格式,json或者字符串,要注意格式,有时候xcode会报EOF的错,就是格式错
    NSString *str= @"25";
    NSString *JSResult = [NSString stringWithFormat:@"getUseridResult('%@')",str];
    
    //OC调用JS
    [self.webView evaluateJavaScript:JSResult completionHandler:^(id _Nullable result, NSError * _Nullable error) {
//如果没错的话 result 为0  error 为null
        NSLog(@"%@", result,error);
    }];
}

未完待续

你可能感兴趣的:(WKWebView简单使用(OC))