iOS-WKWebView
5208 ワード
UIWebViewはメモリの消費量が多すぎて、メモリのピークはさらに誇張されています.WKWebViewWebページのロード速度も向上
1、HTML 5の機能をより多くサポートする2、公式に発表された60 fpsまでのスクロールリフレッシュ率、および内蔵ジェスチャー3、Safariと同じJavaScriptエンジンを内蔵し、JavaScriptのNitroライブラリのロードと使用を許可する(UIWebViewで制限されている).4、UIWebViewDelegateとUIWebViewを14種類と3つのプロトコル(公式ドキュメントの説明)5に分割し、より少ないメモリを占有し、性能、安定性、機能の面で大きな向上を遂げた.
ロードの進捗プロパティが追加されました:estimatedProgress
まずWebKitライブラリの導入が必要です
WKWebViewには2つのdelegateがあり、 WKUIDelegate WKNavigationDelegate. WKNavigationDelegateは主にいくつかのページのジャンプ、ロード処理操作を処理し、WKUIdelegateは主にJSスクリプト、確認ボックス、警告ボックスなどを処理する.
WKNavigationDelegate
WKUIDelegate
WKWebViewとJSのインタラクション:
スクリプト情報に直訳して、本明細書ではJSイベントとする)に対するリスニングを直接追加することで、JS呼び出しOCを実現することができる.すべての操作はWKUSerContentControllerで処理されます
WKUSerContentControlの入手方法
WKUserContentControllerはWKWebViewのプロパティであり、WKWebViewはWKWebViewのプロパティ(つまりWKWebViewがインスタンス化されたときに伝わるconfiguration)である
JSコールOC:
まずJSコードにあらかじめ約束したScriptMessage(JSイベント)への呼び出しwindowを加える.webkit.messageHandlers..postMessage(転送が必要なデータ)OC側に@"closeWindow"というJSの傍受を追加する:
OC呼び出しJS:
HTTPをサポートする:
ローカルhtmlをロードするには:
HTMLをロードして表示しない
参照先:https://www.jianshu.com/p/4fa8c4eb1316 http://www.cocoachina.com/ios/20171019/20849.html http://www.cocoachina.com/ios/20170908/20518.html https://www.jianshu.com/p/870dba42ec15
1、HTML 5の機能をより多くサポートする2、公式に発表された60 fpsまでのスクロールリフレッシュ率、および内蔵ジェスチャー3、Safariと同じJavaScriptエンジンを内蔵し、JavaScriptのNitroライブラリのロードと使用を許可する(UIWebViewで制限されている).4、UIWebViewDelegateとUIWebViewを14種類と3つのプロトコル(公式ドキュメントの説明)5に分割し、より少ないメモリを占有し、性能、安定性、機能の面で大きな向上を遂げた.
ロードの進捗プロパティが追加されました:estimatedProgress
まずWebKitライブラリの導入が必要です
WKWebViewには2つのdelegateがあり、
//
- (instancetype)initWithFrame:(CGRect)frame;
// webview ,
- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;
WKNavigationDelegate
// , ( 、 、 )、 。
//
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
}
//
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
}
//
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
}
//
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{
}
// , ( )
//
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
}
// ,
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
NSLog(@"%@",navigationResponse.response.URL.absoluteString);
//
decisionHandler(WKNavigationResponsePolicyAllow);
//
//decisionHandler(WKNavigationResponsePolicyCancel);
}
// ,
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"%@",navigationAction.request.URL.absoluteString);
//
decisionHandler(WKNavigationActionPolicyAllow);
//
//decisionHandler(WKNavigationActionPolicyCancel);
}
WKUIDelegate
#pragma mark - WKUIDelegate
// WebView
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures{
return [[WKWebView alloc]init];
}
//
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler{
completionHandler(@"http");
}
//
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler{
completionHandler(YES);
}
//
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{
NSLog(@"%@",message);
completionHandler();
}
WKWebViewとJSのインタラクション:
スクリプト情報に直訳して、本明細書ではJSイベントとする)に対するリスニングを直接追加することで、JS呼び出しOCを実現することができる.すべての操作はWKUSerContentControllerで処理されます
WKUSerContentControlの入手方法
WKUserContentControllerはWKWebViewのプロパティであり、WKWebViewはWKWebViewのプロパティ(つまりWKWebViewがインスタンス化されたときに伝わるconfiguration)である
WKUserContentController *conntentController = self.webView.configuration.userContentController;
JSコールOC:
まずJSコードにあらかじめ約束したScriptMessage(JSイベント)への呼び出しwindowを加える.webkit.messageHandlers..postMessage(転送が必要なデータ)OC側に@"closeWindow"というJSの傍受を追加する:
[conntentController addScriptMessageHandler:self name:@"closeWindow"];
[conntentController removeScriptMessageHandlerForName:@"closeWindow"];
OC呼び出しJS:
// UIWebView WKWebView JS
[self.webView evaluateJavaScript:@"function('action')" completionHandler:nil];
HTTPをサポートする:
NSAppTransportSecurity
NSAllowsArbitraryLoads
ローカルhtmlをロードするには:
NSURL *filePath = [[NSBundle mainBundle] URLForResource:@"www/index.html" withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:filePath];
[_wkWebView loadRequest:request];
HTMLをロードして表示しない
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"WebFile"];
:
参照先:https://www.jianshu.com/p/4fa8c4eb1316 http://www.cocoachina.com/ios/20171019/20849.html http://www.cocoachina.com/ios/20170908/20518.html https://www.jianshu.com/p/870dba42ec15