iOS WKWebViewの使用

3982 ワード

WKWebViewはiOS 8が追加し始めたブラウズビューです
新しいプロパティ
性能は高くて、安定性は良くて、占有するメモリは比较的に小さくJSインタラクティブにHTML 5の新しい特性を支持してプログレスバーを追加して内蔵ジェスチャーを支持することができて60 fpsのリフレッシュの周波数に达すると言われています
使用
1、webkitライブラリのインポート
#import 

2、協議を守る
WKNavigationDelegateこのエージェントが提供する方法は、ロードプロセス(ページのロード開始、ロード完了、ロード失敗)を追跡し、ジャンプを実行するかどうかを決定するために使用できます.
WKUIdelegateというエージェントの方法は基本的にインタフェースのポップアッププロンプトボックスに関連しており,webインタフェースに対する3つのプロンプトボックス(警告ボックス,確認ボックス,入力ボックス)はそれぞれ3つのエージェントメソッドに対応している.そして新しいwebviewを作成します
3、初期化
//      
- (instancetype)initWithFrame:(CGRect)frame;
//    webview     ,     
- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

WKWebViewのAllows BackForwardNavigationGesturesプロパティを左に戻すことができますか?
WebページやHTMLをロードする方法はUIWebViewと同じです
4、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;
//        ,      
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

5、WKUIDelegate
//       WebView
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

JSと対話する
//    JS Alert( JS  )
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
//       ( JS   )
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler;
//       (JS )
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
//WebVeiw  (9.0     )
- (void)webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0);

6、WKScriptMessageHandler
このプロトコルには、受信したJSスクリプトをOCまたはSwiftオブジェクトに直接変換できるAppとwebエンドのインタラクションを向上させるための重要な方法が含まれています.
//  web             
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;

7、直面しやすい問題
➤その中のリンクをクリックしても反応しません
HTMLページのラベルページのジャンプ方法が


リンクをクリックすると「_black」はロードされず、safariで新しいページが表示されるように新しいページが開きます.解決策は再loadで,次のエージェント方式を実現することである.
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { 
 if (navigationAction.targetFrame == nil) {
    //         
     [webView loadRequest:navigationAction.request]; 
  } 
  decisionHandler(WKNavigationActionPolicyAllow);
}

またはSafariを呼び出してリンクを開く