Initial commit
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
//
|
||||
// UMComWebViewController.h
|
||||
// UMCommunity
|
||||
//
|
||||
// Created by Gavin Ye on 8/19/15.
|
||||
// Copyright (c) 2015 Umeng. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "UMComViewController.h"
|
||||
|
||||
@interface UMComWebViewController : UMComViewController<UIWebViewDelegate,
|
||||
NSURLConnectionDelegate,NSURLConnectionDataDelegate>
|
||||
|
||||
- (instancetype)initWithUrl:(NSString *)url;
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,105 @@
|
||||
//
|
||||
// UMComWebViewController.m
|
||||
// UMCommunity
|
||||
//
|
||||
// Created by Gavin Ye on 8/19/15.
|
||||
// Copyright (c) 2015 Umeng. All rights reserved.
|
||||
//
|
||||
|
||||
#import "UMComWebViewController.h"
|
||||
#import "UIViewController+UMComAddition.h"
|
||||
|
||||
@interface UMComWebViewController ()
|
||||
|
||||
@property (nonatomic) BOOL authenticated;
|
||||
|
||||
@property (nonatomic, strong) NSURLRequest *request;
|
||||
|
||||
@property (nonatomic, strong) NSURLRequest *failedRequest;
|
||||
|
||||
@property (nonatomic, strong) UIWebView *webView;
|
||||
|
||||
@property (nonatomic, strong) NSURLConnection * urlConnection;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UMComWebViewController
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
}
|
||||
|
||||
- (instancetype)initWithUrl:(NSString *)url
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
|
||||
webView.delegate = self;
|
||||
self.webView = webView;
|
||||
NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
|
||||
[webView loadRequest:request];
|
||||
[self.view addSubview:webView];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
//兼容HTTPS
|
||||
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
|
||||
BOOL result = _authenticated;
|
||||
if (!_authenticated) {
|
||||
self.failedRequest = request;
|
||||
self.urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
|
||||
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
|
||||
NSURL* baseURL = self.request.URL;
|
||||
if ([challenge.protectionSpace.host isEqualToString:baseURL.host]) {
|
||||
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
|
||||
}
|
||||
}
|
||||
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
|
||||
}
|
||||
|
||||
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)pResponse {
|
||||
_authenticated = YES;
|
||||
[connection cancel];
|
||||
[self.webView loadRequest:self.failedRequest];
|
||||
}
|
||||
|
||||
|
||||
- (void)webViewDidStartLoad:(UIWebView *)webView
|
||||
{
|
||||
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
|
||||
}
|
||||
|
||||
- (void)webViewDidFinishLoad:(UIWebView *)webView
|
||||
{
|
||||
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
|
||||
}
|
||||
|
||||
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
|
||||
{
|
||||
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
|
||||
}
|
||||
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
/*
|
||||
#pragma mark - Navigation
|
||||
|
||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
||||
// Get the new view controller using [segue destinationViewController].
|
||||
// Pass the selected object to the new view controller.
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user