(^o^)/~H 5とのインタラクションWKWebView原生

2701 ワード

   //      
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    //    0
    config.preferences.minimumFontSize = 3;
    //    JavaScript
    config.preferences.javaScriptEnabled = YES;
    //       ,        
    config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
  //     name:    postMessage             window.webkit.messageHandlers.NativeModel.postMessage({name: 'zhangyutang', age: 12});

  //  
    [config.userContentController addScriptMessageHandler:self name:@"releasePaper"];
//  WK
 _wkWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:config];
    _wkWebView.navigationDelegate = self;
    [self.view addSubview:_wkWebView];
    
    
      [_wkWebView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.left.bottom.right.offset(0);
    }];
    
    NSURL * url;
    if (![self.urlStr hasPrefix:@"http"]) {
        url = [NSURL URLWithString:[self.urlStr stringByAppendingPathComponent:self.urlStr]];
    } else {
        url = [NSURL URLWithString:self.urlStr];
    }
    
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.wkWebView loadRequest:request];

WKScriptMessageHandler実装エージェント
#pragma mark - WKScriptMessageHandler
//  web             

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
NSLog(@"JS     %@",NSStringFromSelector(_cmd));
NSLog(@"%@",message.body);
//     
  //    id body = message.body;


//    
if ([message.name isEqualToString:@"releasePaper"])
{
 
  [self.navigationController popToRootViewControllerAnimated:YES];
}
}
        ///WKWebView            JS  .
      //javaScriptString:    JS  
  - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

{

}
  // JS   alert   ,        。
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
{

}
//JS   confirm   ,        。
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
{

}
//JS   prompt   ,        。
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable result))completionHandler;
{

}