CustomWKWebViewController.m 5.49 KB
Newer Older
勾芒's avatar
勾芒 committed
1
//
2
//  CustomWKWebViewController.m
勾芒's avatar
勾芒 committed
3 4 5 6 7 8
//  Lighting
//
//  Created by 曹云霄 on 16/5/17.
//  Copyright © 2016年 上海勾芒科技有限公司. All rights reserved.
//

9
#import "CustomWKWebViewController.h"
10
#import <WebKit/WebKit.h>
曹云霄's avatar
曹云霄 committed
11
@interface CustomWKWebViewController ()<WKNavigationDelegate,WKScriptMessageHandler,UIScrollViewDelegate>
勾芒's avatar
勾芒 committed
12

13
@property (nonatomic,strong) WKWebView *webView;
14
@property (nonatomic,strong) WKWebViewConfiguration *config;
15
@property (nonatomic,strong) UIButton *dismissButton;
勾芒's avatar
勾芒 committed
16 17 18

@end

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
@implementation CustomWKWebViewController

#pragma mark - lazy
- (WKWebViewConfiguration *)config
{
    if (!_config) {
        _config = [[WKWebViewConfiguration alloc]init];
        // 设置偏好设置
        _config.preferences = [[WKPreferences alloc] init];
        // 默认为0
        _config.preferences.minimumFontSize = 10;
        // 默认认为YES
        _config.preferences.javaScriptEnabled = YES;
        // 在iOS上默认为NO,表示不能自动通过窗口打开
        _config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
        // 通过JS与webview内容交互
        _config.userContentController = [[WKUserContentController alloc] init];
        [_config.userContentController addScriptMessageHandler:self name:@"AppModel"];
    }
    return _config;
}
勾芒's avatar
勾芒 committed
40

曹云霄's avatar
曹云霄 committed
41 42 43 44 45
- (WKWebView *)webView
{
    if (!_webView) {
        _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:self.config];
        _webView.navigationDelegate = self;
46
        _webView.scrollView.delegate = self;
47
        [self.view insertSubview:_webView atIndex:0];
曹云霄's avatar
曹云霄 committed
48 49 50 51
    }
    return _webView;
}

52 53
#pragma mark - 停止播放
-(void) viewDidDisappear:(BOOL)animated{
54
    [super viewDidDisappear:animated];
55 56 57
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
}

曹云霄's avatar
曹云霄 committed
58

勾芒's avatar
勾芒 committed
59 60 61
- (void)viewDidLoad {
    [super viewDidLoad];
    
曹云霄's avatar
曹云霄 committed
62
    [self determineTheURLFileType];
曹云霄's avatar
曹云霄 committed
63
    [self addDismissButton];
勾芒's avatar
勾芒 committed
64 65
}

曹云霄's avatar
曹云霄 committed
66 67 68
#pragma mark - 判断加载文件类型
- (void)determineTheURLFileType
{
69
    [self loadURLfileAction];
曹云霄's avatar
曹云霄 committed
70 71 72 73
}

#pragma mark - 加载URL
- (void)loadURLfileAction
勾芒's avatar
勾芒 committed
74
{
75 76 77 78 79
    NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
    NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
    [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
        NSLog(@"清理缓存成功");
    }];
曹云霄's avatar
曹云霄 committed
80 81
}

82 83
#pragma mark - 数据
- (void)setUrlString:(NSString *)urlString
曹云霄's avatar
曹云霄 committed
84
{
85 86
    _urlString = urlString;
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:_urlString]]];
曹云霄's avatar
曹云霄 committed
87 88
}

曹云霄's avatar
曹云霄 committed
89 90 91
#pragma mark - 添加删除按钮
- (void)addDismissButton
{
92 93 94
    self.dismissButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.view addSubview:self.dismissButton];
    [self.dismissButton mas_makeConstraints:^(MASConstraintMaker *make) {
95 96 97
        make.left.mas_equalTo(40);
        make.top.mas_equalTo(40);
        make.size.mas_equalTo(CGSizeMake(50, 50));
曹云霄's avatar
曹云霄 committed
98
    }];
99 100
    [self.dismissButton setBackgroundImage:TCImage(@"1") forState:UIControlStateNormal];
    [self.dismissButton addTarget:self action:@selector(dismissButtonClick) forControlEvents:UIControlEventTouchUpInside];
勾芒's avatar
勾芒 committed
101
}
勾芒's avatar
勾芒 committed
102

103 104 105 106 107 108
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
{
    if ([message.name isEqualToString:@"AppModel"]) {
        // 打印所传过来的参数,只支持NSNumber, NSString, NSDate, NSArray,
        // NSDictionary, and NSNull类型
109 110 111 112 113 114 115 116 117 118 119 120 121
       id json = [NSJSONSerialization JSONObjectWithData:[message.body[@"body"] dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil];
        if (json) {
            if ([json isKindOfClass:[NSDictionary class]]) {
                NSDictionary *resultDict = (NSDictionary *)json;
                if ([[resultDict allKeys] containsObject:@"click"]) {
                    self.dismissButton.enabled = NO;
                }else {
                    self.dismissButton.enabled = YES;
                    if (self.luckyDrawFinishBlock) {
                        self.luckyDrawFinishBlock(resultDict);
                    }
                }
            }
122 123 124 125
        }
    }
}

勾芒's avatar
勾芒 committed
126
#pragma mark -dismiss
曹云霄's avatar
曹云霄 committed
127
- (void)dismissButtonClick
勾芒's avatar
勾芒 committed
128
{
129 130 131 132 133 134
    WS(weakSelf);
    [self dismissViewControllerAnimated:YES completion:^{
        if (weakSelf.dismissLuckyDrawController) {
            weakSelf.dismissLuckyDrawController();
        }
    }];
勾芒's avatar
勾芒 committed
135
}
勾芒's avatar
勾芒 committed
136

137
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation
勾芒's avatar
勾芒 committed
138
{
曹云霄's avatar
曹云霄 committed
139
    [XBLoadingView showHUDViewWithDefault];
勾芒's avatar
勾芒 committed
140
}
141 142

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
勾芒's avatar
勾芒 committed
143
{
曹云霄's avatar
曹云霄 committed
144
    [XBLoadingView hideHUDViewWithDefault];
勾芒's avatar
勾芒 committed
145
}
勾芒's avatar
勾芒 committed
146

147 148
- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
{
149
    [XBLoadingView hideHUDViewWithDefault];
150
}
勾芒's avatar
勾芒 committed
151

152 153 154 155 156 157
#pragma mark - <UIScrollViewDelegate>
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    CGFloat height = scrollView.frame.size.height;
    CGFloat contentYoffset = scrollView.contentOffset.y;
    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
158
    WS(weakSelf);
159
    if (distanceFromBottom <= height && self.type == Study) {
160
        [self promptBoxWithMessage:@"学习完成,是否开始考核?" cancelBlock:nil sureBlock:^{
161 162
            if (weakSelf.scrollViewEndBottomBlock) {
                weakSelf.scrollViewEndBottomBlock(weakSelf.indexPath);
163 164 165 166 167 168
            }
        }];
    }
}


勾芒's avatar
勾芒 committed
169 170 171



勾芒's avatar
勾芒 committed
172
@end