亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS中WKWebView的一些特殊使用總結

2019-10-21 18:22:04
字體:
來源:轉載
供稿:網友

前言

現在大部分的app只支持iOS8以上的系統了,在接入H5時可以只管最新的WKWebView了。

WKWebView的優勢

  • 性能高,穩定性好,占用的內存比較小,
  • 支持JS交互
  • 支持HTML5 新特性
  • 可以添加進度條(然并卵,不好用,還是習慣第三方的)。
  • 支持內建手勢,
  • 據說高達60fps的刷新頻率(不卡)

本文將給大家總結下iOS中WKWebView的一些特殊使用,下面話不多說了,來一起看看詳細的介紹吧

WKWebView 加載本地網頁的方式

1.直接加載字符串

- (void)loadHTMLString {//直接加載字符串NSString *path = [[NSBundle mainBundle] pathForResource:@"story" ofType:nil];NSString *body = [NSString stringWithContentsOfURL:[NSURL fileURLWithPath:path] encoding:(NSUTF8StringEncoding) error:nil];NSString *cssPath = [[NSBundle mainBundle] pathForResource:@"css" ofType:nil];NSString *css = [NSString stringWithContentsOfURL:[NSURL fileURLWithPath:cssPath] encoding:NSUTF8StringEncoding error:nil];NSString *html = @"<html>";html = [html stringByAppendingString:@"<head>"];html = [html stringByAppendingString:@"<meta name=/"viewport/" content=/"width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover/">"];html = [html stringByAppendingString:@"<style type=/"text/css/">"];html = [html stringByAppendingString:css];html = [html stringByAppendingString:@"</style></head><body>"];html = [html stringByAppendingString:body];html = [html stringByAppendingString:@"</body></html>"];[webview loadHTMLString:html baseURL:nil];}

需要注意的是, baseURL 可以用來控制請求權限

2.加載本地文件

- (void)loadHTMLContent {//加載本地文件NSString *rootPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];NSURL *rootURL = [NSURL fileURLWithPath:rootPath];NSString *bodyTargetPath = [rootPath stringByAppendingPathComponent:@"index.html"];NSURL *url = [NSURL fileURLWithPath:bodyTargetPath];//這里必須指定到沙盒的具體文件夾,不能再沙盒根目錄上[webview loadFileURL:url allowingReadAccessToURL:rootURL];}

重定向請求

1.通過 URLProtocol

新建 Protocol 的子類,并添加請求屬性

@property (nonnull,strong) NSURLSessionDataTask *task;

由于 WKWebview 的特殊性,這里需要新建類別,并注冊需要監聽的請求頭 [NSURLProtocol wk_registerScheme:@"http"];

注冊監聽 [NSURLProtocol registerClass:[BZURLProtocol class]];

過濾需要進行處理的請求,同時也要過濾那些已經處理過的請求。

+ (BOOL)canInitWithRequest:(NSURLRequest *)request {if ([request.URL.absoluteString containsString:@"localhost"]) {//看看是否已經處理過了,防止無限循環if ([NSURLProtocol propertyForKey:kBZURLProtocolKey inRequest:request]) {return NO;}return YES;}return NO;}

將請求通過下面的方法,進行重新組裝,設置成我們自己的請求

+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request

將上面組裝好的請求,通過下面的方法發出。并在這里將發出的請求,進行標記,因為會重走流程,避免循環處理

- (void)startLoading {NSMutableURLRequest *mutableReqeust = [[self request] mutableCopy];//給我們處理過的請求設置一個標識符, 防止無限循環,[NSURLProtocol setProperty:@YES forKey:kBZURLProtocolKey inRequest:mutableReqeust];NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];self.task = [session dataTaskWithRequest:self.request];[self.task resume];}

這里通過 task 來進行網絡請求發送,也可以在這里進行請求的緩存處理,加快訪問

最后需要設置代理方法,保證請求被允許和接收到數據后的加載

- (void)URLSession:(NSURLSession *)sessiondataTask:(NSURLSessionDataTask *)dataTaskdidReceiveResponse:(NSURLResponse *)responsecompletionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {//允許請求加載[[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageAllowed];completionHandler(NSURLSessionResponseAllow);}- (void)URLSession:(NSURLSession *)sessiondataTask:(NSURLSessionDataTask *)dataTaskdidReceiveData:(NSData *)data {//加載數據[[self client] URLProtocol:self didLoadData:data];}

停止請求的時候注意銷毀對象

- (void)stopLoading {if (self.task != nil) {[self.task cancel];}}

退出的時候也要注意移除監聽

[NSURLProtocol wk_unregisterScheme:@"http"];[NSURLProtocol unregisterClass:[BZURLProtocol class]];

2.通過第三方庫 GCDWebServer 處理請求

建立 server 要在發出請求之前

server = [[GCDWebServer alloc] init];

添加監控方法,這里提供了很多種選擇,包含了請求方式和異步同步回調等,這里選擇了 GET 方法和異步回調。拿到結果后將其回調給 server ,完成重定向

//異步請求函數[server addDefaultHandlerForMethod:@"GET"requestClass:[GCDWebServerRequest class]asyncProcessBlock:^(__kindof GCDWebServerRequest * _Nonnull request, GCDWebServerCompletionBlock _Nonnull completionBlock) {if ([request.URL.absoluteString containsString:@"localhost"]) {//命中了需要特殊處理的請求,這里進行特定操作NSURL *url = [NSURL URLWithString:@"http://m.baidu.com/static/search/baiduapp_icon.png"];NSURLRequest *request = [NSURLRequest requestWithURL:url];NSURLSession *session = [NSURLSession sharedSession];//發出請求NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (data && error == nil) {//接收到正確的數據,并返回給serverGCDWebServerDataResponse *response = [GCDWebServerDataResponse responseWithData:data contentType:@"image/jpeg"];completionBlock(response);} else {//數據請求失敗,返回給server一個空的或者失敗的結果GCDWebServerDataResponse *response = [GCDWebServerDataResponse response];completionBlock(response);}}];[task resume];}}];

開啟 server [server start];

最后是發出請求,否則會發生監控不生效的問題

iOS,WKWebView,特殊使用 iOS,WKWebView,特殊使用

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄色在线观看| 91精品国产自产在线| 日本高清视频一区| 精品美女永久免费视频| 欧美精品videofree1080p| 日韩av在线最新| 97超视频免费观看| 久99九色视频在线观看| 日韩欧美综合在线视频| 久久精品99久久久久久久久| 日韩中文字幕视频在线观看| 深夜福利一区二区| 精品久久中文字幕| 久热精品视频在线免费观看| 久久中文字幕视频| 欧美成人精品激情在线观看| 性色av一区二区三区| 国产精品久久久久久久久久ktv| 成人在线免费观看视视频| 在线观看国产精品91| 91视频国产精品| 国产91热爆ts人妖在线| 精品久久久久久中文字幕大豆网| 日韩久久免费电影| 日本一区二区在线免费播放| 欧美视频在线观看免费网址| 欧美精品精品精品精品免费| 欧美性猛交xxxx黑人| 日本欧美在线视频| 欧美乱妇高清无乱码| 精品亚洲aⅴ在线观看| 亚洲肉体裸体xxxx137| 日韩影视在线观看| 欧美日韩国产在线看| 国内精品一区二区三区四区| 日韩精品电影网| 色综合91久久精品中文字幕| 欧美在线视频网站| 孩xxxx性bbbb欧美| 日韩精品在线观看一区| 2021国产精品视频| 92看片淫黄大片看国产片| 亚洲欧美国产另类| 国产成人一区二区三区| 日韩欧美第一页| 亚洲第一色中文字幕| 日韩免费看的电影电视剧大全| 久久男人的天堂| 精品国产欧美一区二区三区成人| 久久久亚洲国产| 欧美精品在线免费播放| 日韩a**站在线观看| 成人在线国产精品| 欧美国产日韩在线| 欧美日韩亚洲激情| 成人精品一区二区三区| 丝袜一区二区三区| 成人免费直播live| 91精品国产91久久久久| 国产一区二区三区在线播放免费观看| 日韩精品视频中文在线观看| 日韩视频欧美视频| 98精品国产自产在线观看| 欧美激情亚洲综合一区| 久久精品视频在线| 91精品综合视频| 57pao国产精品一区| 欧美成人高清视频| 亚洲精品乱码久久久久久金桔影视| 一区二区在线视频播放| 国产网站欧美日韩免费精品在线观看| 欧美激情在线狂野欧美精品| 中文精品99久久国产香蕉| 色综合久久久久久中文网| 亚洲黄色www网站| 青草青草久热精品视频在线观看| 亚洲国产精品va| 热re99久久精品国产66热| 一区二区三区日韩在线| 久久99精品久久久久久噜噜| 亚洲欧美精品伊人久久| 久久在线观看视频| 欧美最猛黑人xxxx黑人猛叫黄| 欧美亚洲成人免费| 国产精品人人做人人爽| 中日韩美女免费视频网址在线观看| 日韩激情视频在线播放| 精品二区三区线观看| 国产日本欧美一区| 久久精品国产一区二区三区| 美日韩在线视频| 精品亚洲va在线va天堂资源站| 亚洲999一在线观看www| 日韩精品亚洲精品| 97视频在线观看亚洲| 成人午夜一级二级三级| 超碰日本道色综合久久综合| 91福利视频网| 日韩成人中文字幕在线观看| 中文欧美在线视频| 久久网福利资源网站| 国产一区二区香蕉| 色噜噜狠狠狠综合曰曰曰88av| 欧美激情精品久久久久久蜜臀| 久久久噜噜噜久久| 亚洲午夜性刺激影院| 中文字幕一区二区三区电影| 国产一区二区三区视频免费| 韩国视频理论视频久久| 91精品啪aⅴ在线观看国产| 国产精品一区av| 色与欲影视天天看综合网| 久久欧美在线电影| 日韩欧美中文字幕在线观看| 91精品国产91久久久久| 国产精品欧美激情在线播放| 日韩一区二区三区xxxx| 精品久久久久久久久久国产| 在线观看视频99| 免费不卡在线观看av| 日韩欧美亚洲成人| 精品国产乱码久久久久久天美| 亚洲性生活视频| 欧美日韩国产综合新一区| 精品久久久久久中文字幕一区奶水| 久久久国产精彩视频美女艺术照福利| 136fldh精品导航福利| 亚洲第一区第二区| 国产在线精品成人一区二区三区| 亚洲国产精品久久精品怡红院| 韩日欧美一区二区| 茄子视频成人在线| 亚洲国产精久久久久久久| 成人激情黄色网| 久久人人爽人人爽人人片av高清| 国产精品极品在线| 国产欧美中文字幕| 国产精品88a∨| 亚洲女人天堂色在线7777| 精品国产一区二区三区在线观看| 成人黄色免费看| 在线精品国产成人综合| 69av视频在线播放| 亚洲精品久久久久久久久久久久| 国产精自产拍久久久久久| 欧美国产中文字幕| 69久久夜色精品国产69| 亚洲日韩中文字幕在线播放| 日韩中文av在线| 国产做受69高潮| 日韩av免费在线观看| 欧美视频裸体精品| 亚洲欧美日韩直播| 成人精品一区二区三区| 成人在线中文字幕| 日韩男女性生活视频| 亚洲3p在线观看| 欧美高跟鞋交xxxxxhd| 91av网站在线播放| 日韩成人在线视频| 日韩精品视频在线| 久久夜色精品国产欧美乱| 欧美午夜片在线免费观看| 欧美丰满少妇xxxxx做受|