まとまった記事が意外となかったので。
宣言
MyWebView.h
# import <UIKit/UIKit.h>
# import <WebKit/WebKit.h>
@interface MyWebView : UIView <WKNavigationDelegate, WKUIDelegate>
@property (strong) WKWebView *webView;
@end
初期化
MyWebView.m
_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
_webView.navigationDelegate = self;
_webView.UIDelegate = self;
[self addSubview:_webView];
ロード
MyWebView.m
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
進む、戻る、リロード
MyWebView.m
[_webView canGoBack];
[_webView canGoForward];
[_webView reload];
[_webView goForward];
[_webView goBack];
デリゲート
shouldStartLoadWithRequest
MyWebView.m
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
didStartLoad
MyWebView.m
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
didFinishLoad
MyWebView.m
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
didFailWithError
MyWebView.m
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;
Basic認証
UIAlertControllerWrapperはUIAlertControllerをラップしたクラスです。
こちらを参考に作りました。
MyWebView.m
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(nonnull NSURLAuthenticationChallenge *)challenge completionHandler:(nonnull void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential * _Nullable))completionHandler {
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic] == YES){
NSLog(@"didReceiveAuthenticationChallenge");
[UIAlertControllerWrapper showAlertViewWithIdAndPassword:@"Authentication" message:@"Input username and password." ok:^(UIAlertAction *action, UIAlertController *cntr){
NSURLCredential *credential = [NSURLCredential credentialWithUser:[cntr.textFields objectAtIndex:0].text password:[cntr.textFields objectAtIndex:1].text persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}cancel:^(UIAlertAction *cancel){
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
}];
}else{
completionHandler(NSURLSessionAuthChallengeRejectProtectionSpace, nil);
}
}
Javascript実行
MyWebView.m
[webView evaluateJavaScript:@"document.title"
completionHandler:^(NSString *result, NSError *error){
}];