EMASCurlDemo/WkWebViewDemoController.m (64 lines of code) (raw):
#import "WkWebViewDemoController.h"
#import <WebKit/WebKit.h>
#import <EMASCurl/EMASCurl.h>
#import <EMASCurlWeb/EMASCurlWeb.h>
#import <AlicloudHttpDNS/AlicloudHttpDNS.h>
@interface SampleDnsResolver : NSObject<EMASCurlProtocolDNSResolver>
@end
@implementation SampleDnsResolver
+ (NSString *)resolveDomain:(NSString *)domain {
HttpDnsService *httpdns = [HttpDnsService sharedInstance];
HttpdnsResult* result = [httpdns resolveHostSyncNonBlocking:domain byIpType:HttpdnsQueryIPTypeAuto];
if (result) {
if(result.hasIpv4Address || result.hasIpv6Address) {
NSMutableArray<NSString *> *allIPs = [NSMutableArray array];
if (result.hasIpv4Address) {
[allIPs addObjectsFromArray:result.ips];
}
if (result.hasIpv6Address) {
[allIPs addObjectsFromArray:result.ipv6s];
}
NSString *combinedIPs = [allIPs componentsJoinedByString:@","];
NSLog(@"resolve domain success, domain: %@, resultIps: %@", domain, combinedIPs);
return combinedIPs;
}
}
NSLog(@"resolve domain failed, domain: %@", domain);
return nil;
}
@end
@interface WkWebViewDemoController ()
@property (nonatomic, strong) WKWebView *webView;
@end
@implementation WkWebViewDemoController
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"WebView Demo";
// Add reload button to navigation bar
UIBarButtonItem *reloadButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self
action:@selector(reloadWebView)];
self.navigationItem.rightBarButtonItem = reloadButton;
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
NSURLSessionConfiguration *urlSessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
[EMASCurlProtocol setDebugLogEnabled:YES];
[EMASCurlProtocol setBuiltInRedirectionEnabled:NO];
// [EMASCurlProtocol setHTTPVersion:HTTP2];
// [EMASCurlProtocol setDNSResolver:[SampleDnsResolver class]];
[EMASCurlProtocol installIntoSessionConfiguration:urlSessionConfig];
EMASCurlWebUrlSchemeHandler *urlSchemeHandler = [[EMASCurlWebUrlSchemeHandler alloc] initWithSessionConfiguration:urlSessionConfig];
[EMASCurlWebContentLoader initializeInterception];
[configuration setURLSchemeHandler:urlSchemeHandler forURLScheme:@"http"];
[configuration setURLSchemeHandler:urlSchemeHandler forURLScheme:@"https"];
[configuration enableCookieHandler];
self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration];
[self.view addSubview:self.webView];
NSURL *url = [NSURL URLWithString:@"https://m.taobao.com"];
// NSURL *url = [NSURL URLWithString:@"http://blog.sample.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
- (void)reloadWebView {
[self.webView reload];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.webView.frame = self.view.safeAreaLayoutGuide.layoutFrame;
}
@end