(^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;
{
}