独自のアプリケーション内蔵ブラウザを作成
7675 ワード
私たちのプロジェクトでは、多くの場合、微信内蔵ブラウザのようなWebページのロード形式を実現する必要があります.今日は自分で実現しましょう.
新しいプロパティ
iOS 8の後、アップルは新しいウェブブラウザコントロールWKWebViewを発表した.これまでのは、より良い性能、より高い安定性を提供する は、より多くのHTML 5プロパティ をサポートしています.最大60 fpsのスクロールリフレッシュ率と豊富な内蔵ジェスチャー メモリ使用量は、UIWebViewの1/3-1/4 のみの場合があります. Safariと同じJavaScriptエンジン を有する最大60 fpsのスクロールリフレッシュ率と豊富な内蔵ジェスチャー フレームワーク解読 WKBackForwardListこのオブジェクトはブラウザの前に閲覧したページのリストで、WebViewの前進または後退を通じて記録されたいずれかのページにアクセスできます.これはオブジェクトであり、配列 ではありません. WKBackForwardListItemこのオブジェクトは、上の に含む. WKFrameInfoは、ウェブページの主な構成情報 を含む. WKNavigationAction Webページの構造情報、Webページのインタラクション時にトリガーされるナビゲーションタイプ、Webページのリクエスト情報など を含むWebKitフレームワークの重要なファイルです. WKPreferencesここでユーザは、ウェブページのフォントサイズ、JavaScriptインタラクションを許可するかどうかなどの を構成することができる. WKScriptMessageインタラクションにおける重要なファイル原生用JavaScriptインタラクションに関する場合、このファイルは、原生がインタラクション応答を受信した後に呼び出されるインタフェース名および受信情報データ を提供する. WKScriptMessageHandlerインタラクションの重要なファイルには1つの方法しかありません.JavaScriptでインタラクションを行うと、この方法 が実行されます. WKSecurityOriginは、要求されたHostアドレス、ポート番号など、主にウェブページのセキュリティ情報を含む WKUserContentControllerインタラクションにおける重要ファイルには、JavaScriptインタラクション時のインタフェースの登録/削除の方法など が含まれる. WKWebViewの重要なファイルには、WKWebViewの初期化、操作方法、および一連のプロパティ が含まれています. WKWebViewConfigurationの重要なファイルWKWebViewの初期化に必要なオブジェクトです.ここでは、WKWebViewの多くのプロパティを事前に構成できます. WKNavigationDelegateの2つのエージェントの1つです.重要なファイルは、WKWebViewの宣言サイクル全体で、ページがロードされるかどうかを決定し、ページがロードされるかどうかを決定し、ページのロードに成功/失敗した場合にトリガーされるエージェントメソッドです.その対応するメソッドでは、必要に応じて を設定できます. WKUIdelegate 2つのエージェントの2つで、重要なファイルWKWebViewページが作成され、ページのポップアップウィンドウに遭遇したときに対応するトリガが発生する方法 があります.
WKNavigationDelegate
WKUIDelegate
WKWebViewとKVO
WKWebViewには、KVOで傍受できるいくつかの属性があります.
これらのプロパティについては、
WKWebViewとJavaScriptのインタラクション
以前、WebViewJavaScriptBridgeサードパーティライブラリを使用してJavaScriptとのオリジナルのインタラクションを行ったことがありますが、このサードパーティライブラリを使用すると、WKUIdelegateは自分では手に入らないという問題があります.これ以上呼び出さない限り、筆者自身はWKWebViewとJavaScriptのインタラクションに使用するファイルを簡単に書きました.ソースコードは工事中にあります.
筆者はWKWebViewとJavaScriptのインタラクションを研究する過程で,多くのピットを発見した. JavaScript側にデータを送信する場合は、 に変換する必要があります. JavaScript端の書き方 しかない.
サードパーティ製ライブラリ
このライブラリは私がプロジェクトの必要とWebKitのフレームワークを学ぶ时に书いたもので、もし同じ需要の友达が使うべきならば、もちろんこのライブラリは完璧ではありませんて、后で私は绝えず修正して最も良いことを求めて、Star/issueを歓迎します
プレビュー図-`Push Style`
プレビュー図-`Presended Style`
License
WebViewBrowser is released under the MIT license. See LICENSE for details.
新しいプロパティ
iOS 8の後、アップルは新しいウェブブラウザコントロールWKWebViewを発表した.これまでの
UIWebView
に比べて、その主な特徴は明らかだ.WKBackForwardList
のうちWKNavigationDelegate
/**
WKWebView /
@param webView WKWebView
@param navigationAction ,
@param decisionHandler , , Block, 。 `WKNavigationActionPolicyCancel`, ,
*/
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
/**
, /
@param webView WKWebView
@param navigationResponse
@param decisionHandler , , Block, 。 `WKNavigationActionPolicyCancel`, ,
*/
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
/**
@param webView WKWebView
@param navigation
*/
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(null_unspecified WKNavigation *)navigation
/**
@param webView WKWebView
@param navigation
*/
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation
/**
@param webView WKWebView
@param navigation
@param error
*/
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error
/**
@param webView WKWebView
@param navigation
*/
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation
/**
@param webView WKWebView
@param navigation
*/
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation
/**
@param webView WKWebView
@param navigation
@param error
*/
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error
/**
API, AFN、UIWebView API
*/
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler
WKUIDelegate
/**
, WebView
*/
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
/**
JavaScript
@param webView WKWebView
@param message
@param frame
@param completionHandler Block,
*/
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler
/**
JavaScript
*/
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler
/**
JavaScript
*/
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable))completionHandler
WKWebViewとKVO
WKWebViewには、KVOで傍受できるいくつかの属性があります.
/**
*/
@property (nullable, nonatomic, readonly, copy) NSString *title;
/**
URL
*/
@property (nullable, nonatomic, readonly, copy) NSURL *URL;
/**
*/
@property (nonatomic, readonly, getter=isLoading) BOOL loading;
/**
*/
@property (nonatomic, readonly) double estimatedProgress;
/**
*/
@property (nonatomic, readonly) BOOL hasOnlySecureContent;
/**
?
*/
@property (nonatomic, readonly, nullable) SecTrustRef serverTrust
/**
*/
@property (nonatomic, readonly) BOOL canGoBack;
/**
*/
@property (nonatomic, readonly) BOOL canGoForward;
これらのプロパティについては、
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context
でリスニングできますが、インタフェースの破棄時にリスニングステータスを削除することを忘れないでください.WKWebViewとJavaScriptのインタラクション
以前、WebViewJavaScriptBridgeサードパーティライブラリを使用してJavaScriptとのオリジナルのインタラクションを行ったことがありますが、このサードパーティライブラリを使用すると、WKUIdelegateは自分では手に入らないという問題があります.これ以上呼び出さない限り、筆者自身はWKWebViewとJavaScriptのインタラクションに使用するファイルを簡単に書きました.ソースコードは工事中にあります.
筆者はWKWebViewとJavaScriptのインタラクションを研究する過程で,多くのピットを発見した.
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler
メソッドを呼び出すことができます.このうちjavaScriptString
は転送するデータです.これは文字列タイプです.NSDictionary/NSarrayなどのタイプを送信する場合は、まずNSStringタイプwindow.webkit.messageHandlers.YourAPI.postMessage(" JS ");
、そのうちYourAPI
はあなたが登録したインタフェースの名前で、両側は一致しなければならない.括弧の中のものはJSから伝わったデータで、中はNSStringタイプでなければならない.パラメータはサードパーティ製ライブラリ
このライブラリは私がプロジェクトの必要とWebKitのフレームワークを学ぶ时に书いたもので、もし同じ需要の友达が使うべきならば、もちろんこのライブラリは完璧ではありませんて、后で私は绝えず修正して最も良いことを求めて、Star/issueを歓迎します
プレビュー図-`Push Style`
プレビュー図-`Presended Style`
License
WebViewBrowser is released under the MIT license. See LICENSE for details.