WKWebView詳解(二)- WebKit框架認識

語言: CN / TW / HK

WKWebView提供了遠比UIWebView多的類,可以實現更加豐富的功能,它有自己的框架WebKit,框架內包含了所有相關的類。本文就將所有的類按照Apple文件的劃分進行講解。

後續在實際使用中有新的理解會繼續補充

  1. WebKit結構認識
  2. web檢視認識
  3. web檢視的配置
  4. 資料管理
  5. 導航相關
  6. 下載
  7. 網頁內容的處理
  8. 網頁搜尋
  9. 上下文選單
  10. 快照配置

1、WebKit結構認識

使用WebKit框架將樣式豐富的web內容整合到應用程式的原生內容中。WebKit為web介面提供了完整的瀏覽體驗。

通過WebKit框架可以完成一系列事情: 1. 使用HTML、CSS和JavaScript顯示豐富的web內容; 2. 處理頁面內容的更多的載入過程; 3. 顯示多個MIME型別和複合框架元素; 4. 在內容頁面之間導航; 5. 管理最近訪問頁面的前後列表。

也就是說,我們在自定義檢視層次結構中呈現一個WKWebView物件並載入網頁內容。使用相應的物件來管理cookie、執行指令碼、控制導航、生成快照和執行基於文字的搜尋。

WKWebView程式碼結構.png

2、 web檢視認識

通過WKWebView類來顯示web檢視內容,通過WKUIDelegate協議在web頁面顯示本地使用者介面元素

2.1 WKWebView

2.1.1 簡單使用過程

1、請使用WKWebViewConfiguration物件以程式設計方式建立web檢視, 2、在你的web檢視出現在螢幕上之前,使用URLRequest結構從web伺服器載入內容,或者直接從本地檔案或HTML字串載入內容。 3、符合WKNavigationDelegate協議可以實現程式設計導航

2.1.2 建立web檢視

API: ``` // 通過configuration來建立檢視 - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

//通過coder物件來建立檢視 - (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;

//通過webview獲取其配置物件 @property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration; ```

2.1.3 連結是否可以載入

API: + (BOOL)handlesURLScheme:(NSString *)urlScheme;

說明: * 返回一個布林值,檢查WKWebViews是否預設處理給定的URL方案。

2.1.4 顯示本地使用者介面

API: @property (nullable, nonatomic, weak) id <WKUIDelegate> UIDelegate;

說明: * web檢視使用者介面代理,用來整合自定義使用者介面元素的物件,如上下文選單或面板,到web檢視互動。

2.1.5 管理網頁導航

API: @property (nullable, nonatomic, weak) id <WKNavigationDelegate> navigationDelegate;

說明: * 用來管理web檢視的導航行為的物件。 * 用於接受或拒絕導航更改的方法,以及用於跟蹤導航請求的進度的方法。

2.1.6 載入網頁

API: ``` //載入指定URL請求物件引用的web內容,並導航到該內容。 - (nullable WKNavigation )loadRequest:(NSURLRequest )request;

//載入指定資料物件的內容並導航到該物件。 - (nullable WKNavigation )loadData:(NSData )data MIMEType:(NSString )MIMEType characterEncodingName:(NSString )characterEncodingName baseURL:(NSURL *)baseURL

//載入指定HTML字串的內容並導航到它。 - (nullable WKNavigation )loadHTMLString:(NSString )string baseURL:(nullable NSURL *)baseURL;

//從URL請求物件指定的檔案中載入web內容,並導航到該內容。 - (WKNavigation )loadFileRequest:(NSURLRequest )request allowingReadAccessToURL:(NSURL *)readAccessURL

//從指定的檔案載入web內容並導航到它。 - (nullable WKNavigation )loadFileURL:(NSURL )URL allowingReadAccessToURL:(NSURL *)readAccessURL

//從您提供的資料中載入web內容,就像資料是對請求的響應一樣。 - (WKNavigation )loadSimulatedRequest:(NSURLRequest )request response:(NSURLResponse )response responseData:(NSData )data

//從您提供的HTML中載入web內容,就好像HTML是對請求的響應一樣。 - (WKNavigation )loadSimulatedRequest:(NSURLRequest )request responseHTMLString:(NSString *)string

//一個布林值,指示檢視當前是否正在載入內容。 @property (nonatomic, readonly, getter=isLoading) BOOL loading;

//估計當前導航已經載入了多少部分。 @property (nonatomic, readonly) double estimatedProgress; ```

2.1.7 管理載入程序

API: ``` //重新載入當前網頁 - (nullable WKNavigation *)reload;

//重新載入當前網頁 // @param sender The object that sent this message. - (IBAction)reload:(nullable id)sender;

//重新載入當前網頁,如果可能的話,使用快取驗證條件對內容進行端到端重新驗證。 // @result A new navigation representing the reload. - (nullable WKNavigation *)reloadFromOrigin;

//重新載入當前網頁,如果可能的話,使用快取驗證條件對內容進行端到端重新驗證。 - (IBAction)reloadFromOrigin:(nullable id)sender;

//停止載入當前頁面上的所有資源。 - (void)stopLoading;

//停止載入當前頁面上的所有資源。 - (IBAction)stopLoading:(nullable id)sender; ```

2.1.8 管理網頁的下載相關

API: ``` //開始在請求中的URL處下載資源。 - (void)startDownloadUsingRequest:(NSURLRequest )request completionHandler:(void(^)(WKDownload ))completionHandler

//恢復失敗或取消的下載。 - (void)resumeDownloadFromResumeData:(NSData )resumeData completionHandler:(void(^)(WKDownload ))completionHandler ```

2.1.9 檢視檢視的資訊

API: ``` 與web檢視關聯的滾動檢視。 @property (nonatomic, readonly, strong) UIScrollView *scrollView;

//頁面標題 // @discussion @link WKWebView @/link is key-value observing (KVO) compliant for this property. @property (nullable, nonatomic, readonly, copy) NSString *title;

//URL @property (nullable, nonatomic, readonly, copy) NSURL *URL;

//The media type for the contents of the web view. @property (nonatomic, nullable, copy) NSString *mediaType

//自定義使用者代理字串。 @property (nullable, nonatomic, copy) NSString *customUserAgent

//用於評估當前網頁的信任程度的信任管理物件。 @property (nonatomic, readonly, nullable) SecTrustRef serverTrust

//一個布林值,指示web檢視是否通過安全加密的連線載入頁面上的所有資源。 @property (nonatomic, readonly) BOOL hasOnlySecureContent;

//系統從網頁中第一個有效的元標籤獲得的主題顏色。 @property (nonatomic, readonly, nullable) UIColor *themeColor

//web檢視在活動頁面後面顯示的顏色,當用戶滾動到頁面邊界以外時可見。 @property (nonatomic, null_resettable, copy) UIColor *underPageBackgroundColor ```

2.1.10 縮放內容

API: ``` //縮放因子,web檢視根據其邊界縮放內容。 @property (nonatomic) CGFloat pageZoom

//一個布林值,指示是否放大手勢會改變網頁檢視的放大。 @property (nonatomic) BOOL allowsMagnification;

//頁面內容當前縮放的因子。 @property (nonatomic) CGFloat magnification;

//縮放頁面內容並將結果居中於指定的點。 - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point; ```

2.1.11 網頁與媒體的互動

API: ``` //暫停web檢視中所有媒體的播放。 - (void)pauseAllMediaPlaybackWithCompletionHandler:(void (^_Nullable)(void))completionHandler

//獲取web檢視中媒體的播放狀態。 - (void)requestMediaPlaybackStateWithCompletionHandler:(void (^)(WKMediaPlaybackState))completionHandler

//改變網頁是否暫停播放頁面中的所有媒體。 - (void)setAllMediaPlaybackSuspended:(BOOL)suspended completionHandler:(void (^_Nullable)(void))completionHandler

//關閉web檢視顯示的所有媒體,包括圖中圖影片和全屏影片。 - (void)closeAllMediaPresentationsWithCompletionHandler:(void (^_Nullable)(void))completionHandler ```

2.1.12 管理麥克風和攝像頭

API: ``` //列舉屬性,指示網頁是否正在使用攝像機捕捉影象或影片。 @property (nonatomic, readonly) WKMediaCaptureState cameraCaptureState

//列舉屬性,指示網頁是否使用麥克風捕捉音訊。 @property (nonatomic, readonly) WKMediaCaptureState microphoneCaptureState

//設定網頁是否使用相機捕捉影象或影片。 - (void)setCameraCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//設定網頁是否使用麥克風捕捉音訊。 - (void)setMicrophoneCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//一種列舉,描述媒體裝置(如照相機或麥克風)當前是否捕獲音訊或影片。 typedef NS_ENUM(NSInteger, WKMediaCaptureState) { WKMediaCaptureStateNone, WKMediaCaptureStateActive, WKMediaCaptureStateMuted, } ```

2.1.13 搜尋當前頁面的內容

API: //在web檢視的內容中搜索指定的字串。 - (void)findString:(NSString *)string withConfiguration:(nullable WKFindConfiguration *)configuration completionHandler:(void (^)(WKFindResult *result))completionHandler 說明: * WKFindConfiguration是搜尋web檢視內容時使用的配置引數。 * WKFindResult包含搜尋web檢視內容的結果的物件。

2.1.14 網頁之間的導航

API: ``` //一個布林值,指示水平滑動手勢是否會觸發前後頁面導航。 //預設為NO @property (nonatomic) BOOL allowsBackForwardNavigationGestures;

//一個物件,用來管理以前載入的網頁列表,web檢視使用它來進行向前和向後導航。 @property (nonatomic, readonly, strong) WKBackForwardList *backForwardList;

//後退一個網頁 // @result A new navigation to the requested item, or nil if there is no back item in the back-forward list. - (nullable WKNavigation *)goBack;

//後退一個網頁 - (IBAction)goBack:(nullable id)sender;

//向前一個網頁 - (nullable WKNavigation *)goForward;

//向前一個網頁 - (IBAction)goForward:(nullable id)sender;

//導航到歷史網頁列表中的某一個網頁 - (nullable WKNavigation )goToBackForwardListItem:(WKBackForwardListItem )item;

//一個布林值,指示前向列表中是否存在有效的後向項。 @property (nonatomic, readonly) BOOL canGoBack;

//一個布林值,指示前向列表中是否存在有效的前向項。 @property (nonatomic, readonly) BOOL canGoForward;

//一個布林值,它決定按下連結是否顯示連結目的地的預覽。 @property (nonatomic) BOOL allowsLinkPreview

//一個物件,用來捕獲web檢視中當前的互動狀態,以便以後可以將該狀態恢復到另一個web檢視中。//WKWebView的互動狀態(前向列表,當前載入的頁面,滾動位置,表單資料… //可以在另一個WKWebView中檢索和設定恢復狀態。 @property (nonatomic, nullable, copy) id interactionState ```

2.1.15 執行JavaScript

API: ``` //執行JavaScript指令碼 - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

//在指定的框架和內容世界中計算指定的JavaScript指令碼。 - (void)evaluateJavaScript:(NSString )javaScriptString inFrame:(nullable WKFrameInfo )frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler

//將指定的字串作為非同步JavaScript函式執行。 - (void)callAsyncJavaScript:(NSString )functionBody arguments:(nullable NSDictionary )arguments inFrame:(nullable WKFrameInfo )frame inContentWorld:(WKContentWorld )contentWorld completionHandler:(void (^ _Nullable)(_Nullable_result id, NSError * _Nullable error))completionHandler ```

2.1.16 獲取Web View的內容

API: ``` //從web檢視的內容非同步生成一個平臺原生影象。 - (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(UIImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler

//從web檢視的內容非同步生成PDF資料。 - (void)createPDFWithConfiguration:(nullable WKPDFConfiguration *)pdfConfiguration completionHandler:(void (^)(NSData * _Nullable pdfDocumentData, NSError * _Nullable error))completionHandler

//非同步建立web檢視內容的web存檔。 - (void)createWebArchiveDataWithCompletionHandler:(void (^)(NSData , NSError ))completionHandler

//返回列印web檢視內容時使用的列印操作物件。 - (NSPrintOperation )printOperationWithPrintInfo:(NSPrintInfo )printInfo ```

說明: * WKSnapshotConfiguration是當從web檢視的內容生成影象時使用的配置資料。 * WKPDFConfiguration是當生成web檢視內容的PDF表示時使用的配置資料。

2.2 WKUIDelegate

WKUIDelegate提供了網頁呈現本地使用者介面元素的方法,Web檢視使用者介面委託實現該協議來控制新視窗的開啟,增加使用者單擊元素時顯示的預設選單項的行為,並執行其他與使用者介面相關的任務。預設的web檢視實現假設每個web檢視有一個視窗,所以非常規的使用者介面可能實現一個使用者介面委託。 常見的就是進行彈框處理或者新開闢一個WKWebView。

2.2.1 建立和關閉Web檢視

``` //Creates a new web view. - (nullable WKWebView )webView:(WKWebView )webView createWebViewWithConfiguration:(WKWebViewConfiguration )configuration forNavigationAction:(WKNavigationAction )navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

//通知你的應用程式DOM視窗成功關閉。 - (void)webViewDidClose:(WKWebView *)webView ```

2.2.2 顯示UI面板

``` //顯示JavaScript彈框面板。 - webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:

//顯示JavaScript的confirm彈框面板。 - webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:

//顯示JavaScript的input彈框面板。 webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler: ```

2.2.3 顯示上傳面板

``` //顯示檔案上傳面板。 - webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:

//web內容中的檔案上傳控制元件的配置細節。 WKOpenPanelParameters ```

2.2.4 顯示上下文選單

``` //告訴委託上下文選單互動開始了。 - webView:contextMenuConfigurationForElement:completionHandler:

//為委託提供動畫物件,web檢視使用它來顯示上下文選單。 - webView:contextMenuForElement:willCommitWithAnimator:

//告訴委託web檢視將要顯示指定元素的上下文選單。 - webView:contextMenuWillPresentForElement:

//告訴委託web檢視取消了指定元素的上下文選單。 - webView:contextMenuDidEndForElement: ```

說明: * UIContextMenuConfiguration包含上下文選單配置細節的物件。

2.2.5 請求的許可權

``` //確定安全源物件描述的web資源是否可以訪問裝置的方向和運動。 - webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:

//確定安全源物件描述的web資源是否可以訪問裝置的麥克風音訊和攝像機影片。 - webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:

//裝置資源訪問的可能許可權決定的列舉。 typedef NS_ENUM(NSInteger, WKPermissionDecision) { WKPermissionDecisionPrompt, WKPermissionDecisionGrant, WKPermissionDecisionDeny, }

//列舉可捕獲音訊、影片或兩者的媒體裝置型別的列舉。 typedef NS_ENUM(NSInteger, WKMediaCaptureType) { WKMediaCaptureTypeCamera, WKMediaCaptureTypeMicrophone, WKMediaCaptureTypeCameraAndMicrophone, } ```

3、 web檢視的配置

3.1 WKWebViewConfiguration

WKWebViewConfiguration是用來初始化web檢視的屬性集合。提供了關於如何配置WKWebView物件的資訊。 你在你的程式碼中建立一個WKWebViewConfiguration物件,配置它的屬性,並將它傳遞給你的WKWebView物件的初始化器。 web檢視只在建立時包含您的配置設定;以後不能動態更改這些設定

作用: * 用於您的web內容的初始cookie * 您的web內容使用的任何自定義URL方案的處理程式 * 設定如何處理媒體內容設定如何處理媒體內容 * 有關如何在web檢視中管理選擇的資訊 * 自定義指令碼注入到網頁 * 決定如何呈現內容的自定義規則

3.1.1 配置Web View的行為

API: @property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore 說明: * 用於獲取和設定站點cookie以及跟蹤快取資料物件的物件。 * 用作Cookie的設定

API: @property (nonatomic, strong) WKUserContentController *userContentController; 說明: * 該物件協調應用程式的原生代碼與網頁的指令碼和其他內容之間的互動。 * 用作web與native互動

API: @property (nonatomic, strong) WKProcessPool *processPool; 說明: * web內容的程序池 * 當一個web檢視被初始化時,一個新的web內容程序將從指定的池或已有的程序中建立 * 這個物件協調web檢視用來渲染它的web內容和執行指令碼的程序。

API: @property (nullable, nonatomic, copy) NSString *applicationNameForUserAgent 說明: * 出現在使用者代理字串中的應用程式名稱。

API: @property (nonatomic) BOOL limitsNavigationsToAppBoundDomains 說明: * 一個布林值,指示web檢視是否限制導航到應用程式域內的頁面。

3.1.2 配置Web檢視的首選項

API: @property (nonatomic, strong) WKPreferences *preferences; 說明: * 管理web檢視的首選項相關設定的物件。

API: @property (null_resettable, nonatomic, copy) WKWebpagePreferences *defaultWebpagePreferences 說明: * 載入和呈現內容時要使用的預設首選項。

3.1.3 為自定義URL方案新增處理程式

API: - (void)setURLSchemeHandler:(nullable id <WKURLSchemeHandler>)urlSchemeHandler forURLScheme:(NSString *)urlScheme 說明: * 註冊一個物件以載入與指定URL方案關聯的資源。 * 設定URL模式的處理物件

API: - (nullable id <WKURLSchemeHandler>)urlSchemeHandlerForURLScheme:(NSString *)urlScheme 說明: * 返回指定URL模式當前註冊的處理程式物件。

3.1.4 配置呈現行為

API: @property (nonatomic) BOOL ignoresViewportScaleLimits 說明: * 一個布林值,決定網頁檢視是否允許縮放網頁。 * 預設為NO

API: @property (nonatomic) BOOL suppressesIncrementalRendering; 說明: * 一個布林值,指示web檢視是否在內容完全載入到記憶體之前抑制內容呈現。 * 預設為NO

3.1.5 設定媒體播放首選項

API: @property (nonatomic) BOOL allowsInlineMediaPlayback; 說明: * 一個布林值,指示HTML5影片是內聯播放還是使用本機全屏控制器。

API: @property (nonatomic) BOOL allowsAirPlayForMediaPlayback 說明: * 一個布林值,指示web檢視是否允許通過AirPlay播放媒體。

API: @property (nonatomic) BOOL allowsPictureInPictureMediaPlayback 說明: * 指示是否可以播放HTML5影片 * 預設為YES

API: @property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback 說明: * 需要使用者手勢才能開始播放的媒體型別。

API: typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) { WKAudiovisualMediaTypeNone = 0, WKAudiovisualMediaTypeAudio = 1 << 0, WKAudiovisualMediaTypeVideo = 1 << 1, WKAudiovisualMediaTypeAll = NSUIntegerMax } 說明: * 需要使用者手勢才能開始播放的媒體型別。

3.1.6 確定資料型別

API: @property (nonatomic) WKDataDetectorTypes dataDetectorTypes 說明: * 應用於web檢視內容的資料檢測器型別。 * WKDataDetectorTypes是資料檢測器型別類

3.1.7 設定選擇的粒度

API: ``` @property (nonatomic) WKSelectionGranularity selectionGranularity;

typedef NS_ENUM(NSInteger, WKSelectionGranularity) { WKSelectionGranularityDynamic, WKSelectionGranularityCharacter, } ``` 說明: * 使用者可以互動地選擇web檢視內容的粒度級別。 * 預設值為WKSelectionGranularityDynamic。 * WKSelectionGranularity列舉使用者可以選擇和修改web檢視內容的粒度。

3.1.8 選擇使用者介面的方向性

API: ``` @property (nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy

typedef NS_ENUM(NSInteger, WKUserInterfaceDirectionPolicy) { WKUserInterfaceDirectionPolicyContent, WKUserInterfaceDirectionPolicySystem, } ``` 說明: * 使用者介面元素的方向性。 * WKUserInterfaceDirectionPolicy列舉在web檢視中決定使用者介面元素的方向性的策略

3.2 WKWindowFeatures

一個WKWindowFeatures物件包含一個網頁從其包含的web檢視請求的屬性。,用來顯示網頁請求其視窗的相關屬性。 不能直接建立WKWindowFeatures物件。當一個導航操作導致一個新的web檢視的顯示,WKWebView建立這個物件,並把它傳遞給它的UI委託物件的webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:方法。委託使用此物件中的資訊來配置並返回新的web檢視。

檢查視窗的位置和尺寸: 一個布林值,指示是否使包含的視窗可調整大小。 @property (nullable, nonatomic, readonly) NSNumber *allowsResizing; 檢查可見性屬性: ``` 一個布林值,指示網頁是否請求可見的選單欄。 @property (nullable, nonatomic, readonly) NSNumber *menuBarVisibility;

一個布林值,指示網頁是否請求可見的狀態列。 @property (nullable, nonatomic, readonly) NSNumber *statusBarVisibility;

一個布林值,指示網頁是否請求可見工具欄。 @property (nullable, nonatomic, readonly) NSNumber *toolbarsVisibility; ```

3.3 WKProcessPool

WKProcessPool物件表示WebKit用來管理web內容的單個程序。一個不透明的token,用來在一個程序中執行多個web檢視。

為了提供更安全穩定的體驗,WebKit在獨立的程序中渲染web檢視的內容,而不是在你的應用程式的程序空間中。

預設情況下,WebKit給每個web檢視自己的程序空間,直到它達到實現定義的程序限制。在此之後,具有相同WKProcessPool物件的web檢視共享相同的web內容程序。

如果你的應用程式建立了多個web檢視,將相同的WKProcessPool物件分配給可能安全地共享一個程序空間的web檢視。例項化這個類的一個例項,並將它分配給每個web檢視的WKWebViewConfiguration物件的processPool屬性。

不提供任何屬性和方法

3.4 WKPreferences

使用WKPreferences物件來指定您的網站的首選項,包括最小字型大小、JavaScript行為和處理欺詐網站的行為。它封裝了應用於網站的標準行為。

建立這個物件,並將它分配給你用來建立web檢視的WKWebViewConfiguration物件的preferences屬性。

3.4.1 設定渲染的偏好

API: @property (nonatomic) CGFloat minimumFontSize; 說明: * 最小字型大小,以點為單位。

API: @property (nonatomic) BOOL tabFocusesLinks 說明: * 一個布林值,指示按下tab鍵是否將焦點更改為連結和表單控制元件。

3.4.2 設定Java和JavaScript首選項

API: javaScriptCanOpenWindowsAutomatically 說明: * 一個布林值,指示JavaScript是否可以在沒有使用者互動的情況下開啟視窗。

3.4.3 設定fraud警告首選項

API: @property (nonatomic, getter=isFraudulentWebsiteWarningEnabled) BOOL fraudulentWebsiteWarningEnabled 說明: * 一個布林值,指示web檢視是否對可疑的欺詐內容(如惡意軟體或網路釣魚)顯示警告。

3.5 WKWebpagePreferences

指定載入和呈現頁面內容時使用的行為的物件。當你想改變你的web檢視的預設呈現行為時,建立一個WKWebpagePreferences物件。 通常,iOS裝置呈現web內容是為了移動體驗,而Mac裝置呈現內容是為了桌面體驗。

3.5.1 設定JavaScript首選項

API: @property (nonatomic) BOOL allowsContentJavaScript 說明: * 一個布林值,指示是否允許執行來自web內容的JavaScript。

3.5.2 設定首選內容模式

API: ``` @property (nonatomic) WKContentMode preferredContentMode

typedef NS_ENUM(NSInteger, WKContentMode) { WKContentModeRecommended, WKContentModeMobile, WKContentModeDesktop } ``` 說明: * 網頁檢視在載入和呈現網頁時使用的內容模式。 * WKContentMode指示如何呈現web檢視內容的常量

4、 資料管理

4.1 WKWebsiteDataStore

使用WKWebsiteDataStore物件來配置和管理網站資料。用於管理cookie、磁碟和記憶體快取以及web檢視的其他型別的資料。

作用: * 管理網站使用的cookies * 瞭解網站儲存的資料型別 * 刪除不需要的網站資料

4.1.1 建立資料儲存物件

API: + (WKWebsiteDataStore *)defaultDataStore; 說明: * 返回預設資料儲存 * 該儲存將資料持久地儲存到磁碟

API: + (WKWebsiteDataStore *)nonPersistentDataStore; 說明: * 建立一個新的非持久的資料儲存物件,該物件將網站資料儲存在記憶體中,而不是將資料寫入磁碟。 * 實現“隱私瀏覽”很有用

4.1.2 檢查資料儲存屬性

API: @property (nonatomic, readonly, getter=isPersistent) BOOL persistent; 說明: * 一個布林值,指示該物件是否將資料儲存到磁碟。

4.1.3 檢索Cookie Store

API: @property (nonatomic, readonly) WKHTTPCookieStore *httpCookieStore 說明: * 管理網站的HTTP cookie的物件。

4.1.4 檢索特定型別的資料

API: - (void)fetchDataRecordsOfTypes:(NSSet<NSString *> *)dataTypes completionHandler:(void (^)(NSArray<WKWebsiteDataRecord *> *))completionHandler 說明: * 從資料儲存中獲取指定的記錄型別。

API: + (NSSet<NSString *> *)allWebsiteDataTypes; 說明: * 返回所有可用資料型別的集合。

4.1.5 刪除特定型別的資料

API: - (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes forDataRecords:(NSArray<WKWebsiteDataRecord *> *)dataRecords completionHandler:(void (^)(void))completionHandler; 說明: * 從一個或多個數據記錄中刪除指定的網站資料型別。

API: - (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes modifiedSince:(NSDate *)date completionHandler:(void (^)(void))completionHandler; 說明: * 刪除在指定日期之後更改的網站資料。

4.2 WKWebsiteDataRecord

使用WKWebsiteDataRecord物件來發現網站儲存的資訊型別。一個特定網站持久儲存的資料記錄。

記錄識別網站儲存的資料型別,但不識別實際資料。您可以使用這些資訊來幫助使用者管理網站資料。例如,Safari為使用者提供了檢視和刪除網站資料的方法。每個記錄的域名包含網站的域名和字尾。

我們不能直接建立WKWebsiteDataRecord物件。WebKit建立這些記錄並將它們儲存在web檢視的資料儲存中。

使用該資料儲存的fetchDataRecordsOfTypes:completionHandler:來檢索當前記錄物件。還可以使用該物件刪除不需要的記錄。

4.2.1 獲取記錄資訊

API: @property (nonatomic, readonly, copy) NSString *displayName; 說明: * 資料記錄的顯示名稱。

4.2.2 獲取資料型別

API: @property (nonatomic, readonly, copy) NSSet<NSString *> *dataTypes; 說明: * 與記錄相關聯的資料型別。

4.3 WKHTTPCookieStore

管理與特定web檢視相關的HTTP cookie的物件。 使用WKHTTPCookieStore為您的網頁指定初始cookie,並管理網頁內容的cookie。例如,當用戶退出時,可以使用此物件刪除當前會話的cookie。要檢測網頁何時改變cookie,請使用addObserver:方法安裝一個cookie觀察者。

不需要直接建立wkhttpcookestore物件。相反,從web檢視的配置物件的WKWebsiteDataStore物件中檢索這個物件。

4.3.1 管理cookie

API: - (void)getAllCookies:(void (^)(NSArray<NSHTTPCookie *> *))completionHandler; 說明: * 非同步獲取所有儲存的cookie,並將它們交付給指定的完成處理程式。

API: - (void)setCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler; 說明: * 將一個cookie新增到cookieStore上。

API: - (void)deleteCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler 說明: * 刪除指定的cookie。

4.3.2 觀察Cookie Store的變化

API: - (void)addObserver:(id<WKHTTPCookieStoreObserver>)observer; 說明: * 向cookie儲存新增一個觀察者

API: - (void)removeObserver:(id<WKHTTPCookieStoreObserver>)observer; 說明: * 從cookie儲存中移除一個觀察者。 * WKHTTPCookieStoreObserver提供在監控網頁cookies變化的物件中採用的方法

4.4 WKURLSchemeHandler

一個載入資源的協議,載入的URL模式並不能被WebKit 處理,也就是載入自定義的資源。在物件中採用WKURLSchemeHandler協議,為您的web內容處理自定義URL方案。

自定義方案允許你將自定義的資源型別整合到你的web內容中,你也可以為你的應用程式需要的資源定義自定義方案。

在你的應用程式物件中採用這個協議,並使用WKWebViewConfiguration的setURLSchemeHandler:forURLScheme:方法註冊它。

當一個web檢視遇到一個使用自定義方案的資源時,它會建立一個WKURLSchemeTask物件,並將它傳遞給你的方案處理程式物件的方法。

使用webView:startURLSchemeTask:方法開始載入資源。

當你的處理器載入這個物件時,web檢視可能會呼叫你處理器的webView:stopURLSchemeTask:方法來通知你這個資源不再需要了。

載入自定義資源: //請求處理程式開始載入指定資源的資料。 - webView:startURLSchemeTask:

響應一個被取消的資源請求: //請求處理程式停止載入指定資源的資料。 - webView:stopURLSchemeTask:

4.5 WKURLSchemeTask

WKURLSchemeTask協議定義了WebKit用來請求自定義資源的介面。 不在自己的物件中採用這個介面。相反,WebKit建立了採用這個介面的物件,並將它們交付給定製方案處理程式(採用WKURLSchemeHandler協議的物件) 你可以使用WebKit提供的物件來獲取關於請求資源的資訊並載入它們。您還可以使用這些物件向WebKit報告您的進度。

說明: * 當WebKit需要一個自定義方案時,它會在任務的request屬性中放置一個適當的URL請求。 * 在接收到請求後,確定資源的大小,並使用適當的URL響應物件呼叫didReceiveResponse:方法。 * 提供響應反映了web伺服器在接收請求時的行為。 * 載入資源資料的一部分後,呼叫didReceiveData:方法將其傳送到WebKit。 * 您可以多次呼叫該方法以增量地交付資料,也可以使用所有資料呼叫一次。 * 在您完成交付所有資料之後,呼叫didFinish方法。如果在載入過程中出現錯誤,呼叫didFailWithError:來報告它。

5、 導航相關

5.1 WKNavigationDelegate

WKNavigationDelegate提供用於接受或拒絕導航更改的方法,以及用於跟蹤導航請求的進度的方法。用來協調web檢視主框架中的變化的物件中實現WKNavigationDelegate協議的方法。當用戶試圖導航web內容時,web檢視與它的導航委託協調來管理任何轉換。

作用: * 限制內容中特定連結的導航 * 跟蹤請求的進度,並響應錯誤和身份驗證挑戰

5.1.1 允許或拒絕導航請求

API: - webView:decidePolicyForNavigationAction:preferences:decisionHandler: 說明: * 請求委託獲得根據指定首選項和操作資訊導航到新內容的許可權。

API: - webView:decidePolicyForNavigationAction:decisionHandler: 說明: * 請求委託授予根據指定操作資訊導航到新內容的許可權。 * WKNavigationActionPolicy指示是否允許或取消從操作導航到網頁的常量

API: - webView:decidePolicyForNavigationResponse:decisionHandler: 說明: * 請求委託在知道導航請求的響應後導航到新內容的許可權。 * WKNavigationResponsePolicy指示是否允許或取消從響應導航到網頁的常量

5.1.2 跟蹤請求的載入進度

API: - webView:didStartProvisionalNavigation: 說明: * 告訴委託主體框架的導航已經啟動。

API: - webView:didReceiveServerRedirectForProvisionalNavigation: 說明: * 告訴委託web檢視收到了一個請求的伺服器重定向。

API: - webView:didCommitNavigation: 說明: * 告訴委託web檢視已經開始接收主體框架的內容。

API: - webView:didFinishNavigation: 說明: * 告訴委託導航已經完成。

5.1.3 響應認證挑戰

API: - webView:didReceiveAuthenticationChallenge:completionHandler: 說明: * 請求委託響應身份驗證質詢。

API: - webView:authenticationChallenge:shouldAllowDeprecatedTLS: 說明: * 詢問委託是否繼續使用已棄用的TLS版本的連線。

5.1.4 響應導航錯誤

API: - webView:didFailNavigation:withError: 說明: * 告訴委託導航期間發生錯誤。

API: - webView:didFailProvisionalNavigation:withError: 說明: * 告訴委託在早期導航過程中發生了錯誤。

API: - webViewWebContentProcessDidTerminate: 說明: * 告訴委託web檢視的內容過程被終止。

5.1.5 處理下載進度

API: webView:navigationResponse:didBecomeDownload: 說明: * 告訴委託導航響應變成了下載。

API: - webView:navigationAction:didBecomeDownload: 說明: * 告訴委託導航操作變成了下載。

5.2 WKBackForwardList

使用WKBackForwardList物件來檢索web檢視之前載入的頁面。用來管理以前載入的網頁列表,web檢視使用它來進行向前和向後導航。

通常,不會直接建立WKBackForwardList物件。每個web檢視自動建立一個,並使用它來儲存所有載入頁面的歷史記錄。 從web檢視的backForwardList屬性中獲取這個物件,並使用它的內容來方便程式設計導航。

5.2.1 獲取最近的項

``` //當前項之前的項 @property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *backItem;

//當前項 @property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *currentItem;

//當前項之後的項 @property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *forwardItem; ```

5.2.2 獲取列表中的特定項

- (nullable WKBackForwardListItem *)itemAtIndex:(NSInteger)index; 說明: * 返回與當前項相對偏移量處的項。

5.2.3 獲得子列表

``` //當前項之前的項陣列。 @property (nonatomic, readonly, copy) NSArray *backList;

//當前項之後的項陣列。 @property (nonatomic, readonly, copy) NSArray *forwardList; ```

5.3 WKBackForwardListItem

使用wkbackforwardlisttitem物件來獲取以前訪問過的網頁的資訊。網頁檢視先前訪問過的網頁項。 該物件標識頁面的標題和URL。它還標識了請求該網頁的URL。您不需要直接建立wkbackforwardlisttitem物件。相反,當web檢視載入新頁面時,WKBackForwardList物件會將它們與其關聯的web檢視一起建立。

獲取特定於頁面的資訊: ``` - (instancetype)init NS_UNAVAILABLE;

/! @abstract The URL of the webpage represented by this item. / @property (readonly, copy) NSURL *URL;

/! @abstract The title of the webpage represented by this item. / @property (nullable, readonly, copy) NSString *title; ```

獲取請求頁面: //最初請求web檢視載入此頁面的源URL。 @property (readonly, copy) NSURL *initialURL;

5.4 WKNavigation

WKNavigation物件唯一標識一個網頁的載入請求。跟蹤網頁載入進度的物件。 當你請求web檢視載入內容或導航到頁面時,web檢視會返回一個WKNavigation物件來識別你的請求。 隨著載入操作的進行,web檢視將該操作的進度報告給它的導航委託的各種方法,並將匹配的WKNavigation物件傳遞給它們。

獲取內容模式: WebKit用來載入網頁的內容模式。 @property (nonatomic, readonly) WKContentMode effectiveContentMode

5.5 WKNavigationAction

使用一個WKNavigationAction物件來決定是否允許在你的應用程式的web檢視中導航。包含有關導致導航發生的操作的資訊。 你不能直接建立WKNavigationAction物件。相反,web檢視建立它們並將它們傳遞給適當的委託物件。使用委託的方法來分析操作,並決定是否允許產生導航。

5.5.1 獲取導航型別

API: @property (nonatomic, readonly) WKNavigationType navigationType; 說明: * 觸發導航的操作型別。

API: typedef NS_ENUM(NSInteger, WKNavigationType) { WKNavigationTypeLinkActivated, WKNavigationTypeFormSubmitted, WKNavigationTypeBackForward, WKNavigationTypeReload, WKNavigationTypeFormResubmitted, WKNavigationTypeOther = -1, } 說明: * 觸發導航的操作型別。

5.5.2 檢查導航資訊

API: @property (nonatomic, readonly, copy) NSURLRequest *request; 說明: * 與導航操作關聯的URL請求物件。

API: @property (nonatomic, readonly, copy) WKFrameInfo *sourceFrame; 說明: * 請求導航的框架。

API: @property (nullable, nonatomic, readonly, copy) WKFrameInfo *targetFrame; 說明: * 在其中顯示新內容的框架。

5.5.3 檢查使用者操作

API: @property (nonatomic, readonly) NSInteger buttonNumber; 說明: * 引起導航請求的滑鼠按鈕的數量。

API: @property (nonatomic, readonly) NSEventModifierFlags modifierFlags; 說明: * 在導航請求時按下的修改鍵。

5.6 WKNavigationResponse

使用WKNavigationResponse物件來決定是否允許在你的應用程式的web檢視中導航。包含對導航請求的響應的物件,用於制定與導航相關的策略決策。 你不能直接建立WKNavigationResponse物件。相反,web檢視建立它們並將它們傳遞給適當的委託物件。使用委託的方法來分析響應,並決定是否允許產生導航。

5.6.1 獲取響應詳細資訊

//frame的響應 @property (nonatomic, readonly, copy) NSURLResponse *response;

5.6.2 獲取額外的響應資訊

``` //A Boolean value that indicates whether the response targets the web view’s main frame. @property (nonatomic, readonly) BOOL canShowMIMEType;

//一個布林值,指示響應是否針對web檢視的主框架。 @property (nonatomic, readonly, getter=isForMainFrame) BOOL forMainFrame; ```

6、 下載

6.1 WKDownload

表示web資源下載的物件。

6.2 WKDownloadDelegate

您實現的用於跟蹤下載進度和處理重定向、身份驗證挑戰和失敗的協議。

6.2.1 跟蹤下載進度

API: - download:decideDestinationUsingResponse:suggestedFilename:completionHandler: 說明: * 請求委託提供一個檔案目的地,系統應在此寫入下載資料。

API: - downloadDidFinish: 說明: * 告訴委託下載完成。

API: - download:didFailWithError:resumeData: 說明: * 告訴委託下載失敗,並提供錯誤資訊和可用於重新啟動下載的資料。

6.2.2 響應授權挑戰

API: - download:didReceiveAuthenticationChallenge:completionHandler: 說明: * 請求委託響應身份驗證質詢。

API: WKDownloadRedirectPolicy 說明: * 帶有指示是否繼續重定向的用例的列舉。

6.2.3 對重定向

API: - download:willPerformHTTPRedirection:newRequest:decisionHandler: 說明: * 請求委託響應下載的重定向響應。

API: WKDownloadRedirectPolicy 說明: * 帶有指示是否繼續重定向的用例的列舉。

7、 網頁內容的處理

7.1 WKUserContentController

WKUserContentController物件提供了你的應用程式和執行在web檢視中的JavaScript程式碼之間的橋樑。用於管理JavaScript程式碼和web檢視之間的互動,以及過濾web檢視中的內容。

建立並配置一個WKUserContentController物件,作為整個web檢視設定的一部分。在建立web檢視之前,將該物件分配給你的WKWebViewConfiguration物件的userContentController屬性

過程: 1. 將JavaScript程式碼注入到web檢視中執行的網頁中。 2. 安裝自定義JavaScript函式來呼叫應用的原生代碼。 3. 指定自定義過濾器,以防止網頁載入受限制的內容。

7.1.1 新增和刪除自定義指令碼

API: - (void)addUserScript:(WKUserScript *)userScript; 說明: * 注入指定的指令碼到網頁的內容。

API: - (void)removeAllUserScripts; 說明: * 從web檢視中刪除所有使用者指令碼。

API: @property (nonatomic, readonly, copy) NSArray<WKUserScript *> *userScripts; 說明: * 與使用者內容控制器相關聯的使用者指令碼。

7.1.2 新增和刪除訊息處理程式

API: - (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name; 說明: * 新增可以從JavaScript程式碼呼叫的訊息回撥處理程式。

API: - (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler contentWorld:(WKContentWorld *)world name:(NSString *)name 說明: * 安裝一個訊息處理程式,您可以從JavaScript程式碼中指定的內容世界中呼叫它。

API: - (void)addScriptMessageHandlerWithReply:(id <WKScriptMessageHandlerWithReply>)scriptMessageHandlerWithReply contentWorld:(WKContentWorld *)contentWorld name:(NSString *)name 說明: * 安裝一個訊息處理程式,該處理程式向JavaScript程式碼返回一個回覆。

API: - (void)removeScriptMessageHandlerForName:(NSString *)name; 說明: * 從JavaScript程式碼中解除安裝指定名稱的自定義訊息處理程式。

API: - (void)removeScriptMessageHandlerForName:(NSString *)name contentWorld:(WKContentWorld *)contentWorld 說明: * 從JavaScript程式碼中指定的內容世界中解除安裝自定義訊息處理程式。

API: - (void)removeAllScriptMessageHandlersFromContentWorld:(WKContentWorld *)contentWorld 說明: * 從JavaScript程式碼中指定的內容世界中解除安裝所有定製訊息處理程式。

API: - (void)removeAllScriptMessageHandlers 說明: * 解除安裝與使用者內容控制器關聯的所有自定義訊息處理程式。

API: WKScriptMessageHandler 說明: * 一個從執行在網頁中的JavaScript程式碼中接收訊息的介面。

API: WKScriptMessageHandlerWithReply 說明: * 用於響應網頁中執行的JavaScript程式碼的訊息的介面。

7.1.3 新增和刪除內容規則

API: - (void)addContentRuleList:(WKContentRuleList *)contentRuleList 說明: * 將指定的內容規則列表新增到內容控制器物件。

API: - (void)removeContentRuleList:(WKContentRuleList *)contentRuleList 說明: * 從內容控制器物件中移除指定的規則列表。

API: - (void)removeAllContentRuleLists 說明: * 從內容控制器中移除所有規則列表。

API: WKContentRuleList 說明: * 一個用於web內容的規則列表。

7.2 WKContentRuleListStore

使用WKContentRuleListStore來編譯和管理web檢視中過濾內容的規則。包含如何在web檢視中載入和過濾內容的規則。 規則列表在你的應用程式中扮演著內容攔截器的角色。你可以使用它們來阻止web檢視載入特定的內容,無論是基於該內容的原始位置還是其他你指定的標準.

說明: * 獲取預設的WKContentRuleListStore物件或建立一個自定義的store物件,並使用它來編譯或訪問可用的規則。 * 每個store物件將其現有規則持久地儲存在檔案系統中,並在建立時載入這些規則。 * 一個store物件不會自動應用它的任何規則到一個特定的web檢視。要將規則應用到web檢視,需要將其新增到web檢視配置物件的WKUserContentController物件中。

7.2.1 建立內容規則列表儲存

API: + defaultStore 說明: * 返回預設的內容規則列表儲存區。

API: + storeWithURL: 說明: * 在指定目錄中建立一個新的內容規則列表儲存區。

7.2.2 建立和刪除內容規則列表

API: compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler: 說明: * 將指定的JSON內容編譯成一個新規則列表,並將其新增到當前資料儲存區。

API: - removeContentRuleListForIdentifier:completionHandler: 說明: * 從當前資料儲存非同步移除規則列表。

7.2.3 訪問當前規則列表

API: - getAvailableContentRuleListIdentifiers: 說明: * 非同步獲取儲存中所有規則列表的識別符號。

API: - lookUpContentRuleListForIdentifier:completionHandler: 說明: * 非同步搜尋資料儲存中的特定規則列表。

7.3 WKContentWorld

使用WKContentWorld物件作為名稱空間,將你的應用程式的web環境與你執行的單個網頁或指令碼的環境分開。 定義JavaScript程式碼執行範圍的物件,用於防止不同指令碼之間的衝突。 內容世界有助於防止兩個指令碼以衝突的方式修改環境變數時發生的問題。在自己的內容世界中執行指令碼有效地為它提供了一個單獨的環境變數的副本來修改。

說明: * WKContentWorld物件是一個名稱空間,不會在當前web檢視或網頁之外持久化資料。 * 如果你在兩個WKWebView物件中使用相同的內容世界,一個web檢視的內容世界中的變數不會出現在另一個web檢視中。 * 類似地,當用戶或你的應用程式導航到一個新網頁時,前一頁的變數消失了,即使兩個頁面共享相同的內容世界。 * 使用這個類的方法和屬性來獲取所需的內容世界。 * WKContentWorld為你的應用程式提供了一個預設的內容世界,併為當前網頁提供了一個內容世界。您還可以建立新的內容世界。例如,您可以為您管理的每個JavaScript擴充套件建立一個自定義內容世界。在配置或執行與內容相關聯的指令碼時指定內容世界物件。

作用場景: 1. 你有複雜的指令碼邏輯來連線你的web內容到你的應用程式,但是你的web內容有自己複雜的指令碼庫。在這種情況下,為特定於應用程式的指令碼使用一個內容世界,為特定於內容的指令碼使用一個單獨的內容世界。 2. 您實現了一個支援JavaScript擴充套件的web瀏覽器。在這種情況下,為每個擴充套件建立一個獨特的內容世界,以防止擴充套件之間的衝突。

7.3.1 獲取預設內容世界

客戶端的預設世界。 defaultClientWorld

7.3.2 獲取當前頁面的名稱空間

當前網頁內容的內容世界。 pageWorld

7.3.3 檢索自定義內容世界

``` 返回具有指定名稱的自定義內容世界。 + worldWithName:

自定義內容世界的名稱。 name ```

7.4 WKFrameInfo

包含網頁上某一框架資訊的物件。該類的一個例項是一個臨時的、僅包含資料的物件。它不能跨多個委託方法呼叫惟一地標識一個框架。

檢查框架的資訊: ``` 一個布林值,指示該框架是網站的主框架還是子框架。 mainFrame

框架的當前請求。 request

框架的安全源。 securityOrigin ```

7.5 WKSecurityOrigin

WKSecurityOrigin物件是一個臨時的、僅包含資料的物件,它標識與特定資源相關聯的主機名、協議和埠號。 你不能直接建立WKSecurityOrigin物件。相反,WebKit為它載入的資源建立了它們。第一方載入是指與請求網站具有相同安全源的任何載入URL。第一方的網頁可以訪問彼此的資源,如指令碼和資料庫。

因為WKSecurityOrigin物件是瞬態的,所以它不能在多個委託方法呼叫之間唯一地標識安全源。

獲取主機資訊: ``` host

port ```

獲取主機協議: protocol

7.6 WKUserScript

webView注入網頁的指令碼。當你想將自定義指令碼程式碼注入到你的web檢視頁面時,建立一個WKUserScript物件。 使用此物件指定要注入的JavaScript程式碼,以及與何時以及如何注入該程式碼相關的引數。在你建立web檢視之前,把這個物件新增到與你的web檢視配置相關的WKUserContentController物件中。

7.6.1 建立使用者指令碼物件

API: - (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly; 說明: * 建立包含指定原始碼和屬性的使用者指令碼物件。

API: - (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly inContentWorld:(WKContentWorld *)contentWorld 說明: * 建立一個使用者指令碼物件,該物件的範圍是特定的內容世界。

7.6.2 檢查指令碼的資訊

``` //指令碼的原始碼。 @property (nonatomic, readonly, copy) NSString *source;

//將指令碼注入網頁的時間。 @property (nonatomic, readonly) WKUserScriptInjectionTime injectionTime;

//將指令碼內容注入網頁的時間常數。 typedef NS_ENUM(NSInteger, WKUserScriptInjectionTime) { WKUserScriptInjectionTimeAtDocumentStart, WKUserScriptInjectionTimeAtDocumentEnd }

//一個布林值,指示是將指令碼注入到主框架還是所有框架。 @property (nonatomic, readonly, getter=isForMainFrameOnly) BOOL forMainFrameOnly; ```

8、 網頁搜尋

8.1 WKFindConfiguration

是搜尋web檢視內容時使用的配置引數。 建立一個WKFindConfiguration物件,並配置它的屬性來指定如何在web檢視的內容中執行搜尋。要啟動搜尋,呼叫WKWebView的適當方法,並將該物件與搜尋字串一起傳遞。

配置搜尋引數: ``` //一個布林值,指示相對於當前選擇的搜尋方向。預設為NO @property (nonatomic) BOOL backwards;

//一個布林值,指示在匹配搜尋字串時是否考慮大小寫。預設為NO @property (nonatomic) BOOL caseSensitive;

//一個布林值,指示搜尋是否繞到頁面的另一側。預設為YES @property (nonatomic) BOOL wraps; ```

8.2 WKFindResult

包含搜尋web檢視內容的結果的物件。 當你使用WKWebView的方法執行搜尋時,web view會建立一個WKFindResult物件,並將其交付給你的完成處理程式。您不需要直接建立該類的例項。使用web檢視提供的物件來確定它是否找到了匹配的內容。

獲取搜尋結果: //一個布林值,指示web檢視在搜尋過程中是否找到匹配。 @property (nonatomic, readonly) BOOL matchFound;

9、 上下文選單

9.1 WKContextMenuElementInfo

WKContextMenuElementInfo物件包含web檢視內容中連結的URL。包含有關使用者在網頁中單擊的連結的資訊的物件,您可以使用該物件為該連結配置上下文選單。

您不需要直接建立該類的例項。相反,當用戶與連結互動時,web檢視會建立它們,並將它們傳遞給與之關聯的WKUIDelegate物件的方法。在委託方法實現中,使用此物件中的URL來確定如何配置上下文選單。

獲取元素資訊: //使用者單擊的連結的URL。 @property (nonatomic, readonly, nullable) NSURL *linkURL;

10、 快照配置

10.1 WKSnapshotConfiguration

當從web檢視的內容生成影象時使用的配置資料。 當你想要根據web檢視的內容生成影象時,建立一個WKSnapshotConfiguration物件。使用此物件指定web檢視中要捕獲的部分和捕獲行為。

要生成快照,請將配置物件傳遞給WKWebView的takeSnapshotWithConfiguration:completionHandler:方法,該方法返回一個平臺原生映像供您使用。

指定快照尺寸: ``` //你的web檢視要捕獲的部分,指定為檢視座標系統中的一個矩形。 @property (nonatomic) CGRect rect;

//The width of the captured image, in points. @property (nullable, nonatomic, copy) NSNumber *snapshotWidth; ```

配置捕獲行為: //A Boolean value that indicates whether to take the snapshot after incorporating any pending screen updates. //預設為YES @property (nonatomic) BOOL afterScreenUpdates

10.2 WKPDFConfiguration

當生成web檢視內容的PDF表示時使用的配置資料。 當你想要生成一個PDF版本的web檢視內容時,建立一個WKPDFConfiguration物件。 使用此物件指定web檢視中要捕獲的部分。要生成PDF內容,將配置物件傳遞給WKWebView的createPDF(configuration:completionHandler:)方法,該方法返回PDF資料供您使用。

指定快照尺寸: //你的web檢視要捕獲的部分,指定為檢視座標系統中的一個矩形。 @property (nonatomic) CGRect rect