WkWebView 詳解(js交互、進度條、刷新、左右滑動)

WKWebView 是蘋果在 iOS 8 中引入的新組件,目的是給出一個新的高性能的 Web View 解決方案,擺脫過去 UIWebView 的老舊笨重特別是內存占用量巨大的問題。它的優點在于占用更少的內存,處理速度更快。不過有點一點不像webview每次打開網頁沒有緩存,如果用戶要配置一些個人的信息在請求里面,需要配置:
WKWebViewConfiguration 這個類。

js交互

<p></p><pre><code>
// js配置

    WKWebViewConfiguration*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;
    config.userContentController = [[WKUserContentController alloc] init];
    
    // 注入JS對象名稱AppModel,當JS通過AppModel來調用時,
    // 我們可以在WKScriptMessageHandler代理中接收到
    [config.userContentController addScriptMessageHandler:self name:@"MModel"];
    _wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];

</code></pre>

進度條

<p></p><pre><code>
// 計算wkWebView進度條

  • (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

    if (_isLoad) {
    return;
    }

    if ([keyPath isEqualToString:@"estimatedProgress"]) {
    self.progresslayer.opacity = 1;
    CGFloat new = [[change objectForKey:NSKeyValueChangeNewKey] doubleValue];
    CGFloat old = [[change objectForKey:NSKeyValueChangeOldKey] doubleValue];
    if (new < old) {
    return;
    }
    self.progresslayer.frame = CGRectMake(0, 0, self.view.bounds.size.width * [change[@"new"] floatValue], 3);
    if ([change[@"new"] floatValue] == 1) {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    self.progresslayer.opacity = 0;
    });
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    self.progresslayer.frame = CGRectMake(0, 0, 0, 3);
    });
    }
    }

}
</code></pre>

刷新

<p></p><pre><code>
// 增加拉刷新

MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(onHeader)];
[header setTitle:@"下拉刷新" forState:MJRefreshStatePulling];
header.lastUpdatedTimeLabel.hidden = YES;
_wkWebView.scrollView.mj_header = header;

</code></pre>

左右滑動

<p></p><pre><code>
// 瀏覽器內左右滑動

_wkWebView.allowsBackForwardNavigationGestures = YES;

</code></pre>

[下載地址]https://git.oschina.net/mrj_mrj/WkWebView.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容