WKWebView詳解(二)- WebKit框架認(rèn)識(shí)

WKWebView文章匯總

WKWebView提供了遠(yuǎn)比UIWebView多的類(lèi)暇唾,可以實(shí)現(xiàn)更加豐富的功能,它有自己的框架WebKit辰斋,框架內(nèi)包含了所有相關(guān)的類(lèi)策州。本文就將所有的類(lèi)按照Apple文檔的劃分進(jìn)行講解。

后續(xù)在實(shí)際使用中有新的理解會(huì)繼續(xù)補(bǔ)充

  1. WebKit結(jié)構(gòu)認(rèn)識(shí)
  2. web視圖認(rèn)識(shí)
  3. web視圖的配置
  4. 數(shù)據(jù)管理
  5. 導(dǎo)航相關(guān)
  6. 下載
  7. 網(wǎng)頁(yè)內(nèi)容的處理
  8. 網(wǎng)頁(yè)搜索
  9. 上下文菜單
  10. 快照配置

1宫仗、WebKit結(jié)構(gòu)認(rèn)識(shí)

使用WebKit框架將樣式豐富的web內(nèi)容集成到應(yīng)用程序的原生內(nèi)容中够挂。WebKit為web界面提供了完整的瀏覽體驗(yàn)。

通過(guò)WebKit框架可以完成一系列事情:

  1. 使用HTML藕夫、CSS和JavaScript顯示豐富的web內(nèi)容循未;
  2. 處理頁(yè)面內(nèi)容的更多的加載過(guò)程休雌;
  3. 顯示多個(gè)MIME類(lèi)型和復(fù)合框架元素;
  4. 在內(nèi)容頁(yè)面之間導(dǎo)航;
  5. 管理最近訪問(wèn)頁(yè)面的前后列表零抬。

也就是說(shuō),我們?cè)谧远x視圖層次結(jié)構(gòu)中呈現(xiàn)一個(gè)WKWebView對(duì)象并加載網(wǎng)頁(yè)內(nèi)容蜻牢。使用相應(yīng)的對(duì)象來(lái)管理cookie狭郑、執(zhí)行腳本、控制導(dǎo)航铸题、生成快照和執(zhí)行基于文本的搜索铡恕。


WKWebView代碼結(jié)構(gòu).png

2琢感、 web視圖認(rèn)識(shí)

通過(guò)WKWebView類(lèi)來(lái)顯示web視圖內(nèi)容,通過(guò)WKUIDelegate協(xié)議在web頁(yè)面顯示本地用戶界面元素

2.1 WKWebView

2.1.1 簡(jiǎn)單使用過(guò)程

1探熔、請(qǐng)使用WKWebViewConfiguration對(duì)象以編程方式創(chuàng)建web視圖驹针,
2、在你的web視圖出現(xiàn)在屏幕上之前诀艰,使用URLRequest結(jié)構(gòu)從web服務(wù)器加載內(nèi)容柬甥,或者直接從本地文件或HTML字符串加載內(nèi)容。
3其垄、符合WKNavigationDelegate協(xié)議可以實(shí)現(xiàn)編程導(dǎo)航

2.1.2 創(chuàng)建web視圖

API:

// 通過(guò)configuration來(lái)創(chuàng)建視圖
- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

//通過(guò)coder對(duì)象來(lái)創(chuàng)建視圖
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;

//通過(guò)webview獲取其配置對(duì)象
@property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;

2.1.3 鏈接是否可以加載

API:

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

說(shuō)明:

  • 返回一個(gè)布爾值苛蒲,檢查WKWebViews是否默認(rèn)處理給定的URL方案。

2.1.4 顯示本地用戶界面

API:

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

說(shuō)明:

  • web視圖用戶界面代理,用來(lái)集成自定義用戶界面元素的對(duì)象绿满,如上下文菜單或面板臂外,到web視圖交互。

2.1.5 管理網(wǎng)頁(yè)導(dǎo)航

API:

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

說(shuō)明:

  • 用來(lái)管理web視圖的導(dǎo)航行為的對(duì)象喇颁。
  • 用于接受或拒絕導(dǎo)航更改的方法漏健,以及用于跟蹤導(dǎo)航請(qǐng)求的進(jìn)度的方法。

2.1.6 加載網(wǎng)頁(yè)

API:

//加載指定URL請(qǐng)求對(duì)象引用的web內(nèi)容橘霎,并導(dǎo)航到該內(nèi)容蔫浆。
- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;

//加載指定數(shù)據(jù)對(duì)象的內(nèi)容并導(dǎo)航到該對(duì)象。
- (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL

//加載指定HTML字符串的內(nèi)容并導(dǎo)航到它姐叁。
- (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

//從URL請(qǐng)求對(duì)象指定的文件中加載web內(nèi)容瓦盛,并導(dǎo)航到該內(nèi)容。
- (WKNavigation *)loadFileRequest:(NSURLRequest *)request allowingReadAccessToURL:(NSURL *)readAccessURL

//從指定的文件加載web內(nèi)容并導(dǎo)航到它七蜘。
- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL 

//從您提供的數(shù)據(jù)中加載web內(nèi)容谭溉,就像數(shù)據(jù)是對(duì)請(qǐng)求的響應(yīng)一樣。
- (WKNavigation *)loadSimulatedRequest:(NSURLRequest *)request response:(NSURLResponse *)response responseData:(NSData *)data

//從您提供的HTML中加載web內(nèi)容橡卤,就好像HTML是對(duì)請(qǐng)求的響應(yīng)一樣扮念。
- (WKNavigation *)loadSimulatedRequest:(NSURLRequest *)request responseHTMLString:(NSString *)string

//一個(gè)布爾值,指示視圖當(dāng)前是否正在加載內(nèi)容碧库。
@property (nonatomic, readonly, getter=isLoading) BOOL loading;

//估計(jì)當(dāng)前導(dǎo)航已經(jīng)加載了多少部分柜与。
@property (nonatomic, readonly) double estimatedProgress;

2.1.7 管理加載進(jìn)程

API:

//重新加載當(dāng)前網(wǎng)頁(yè)
- (nullable WKNavigation *)reload;

//重新加載當(dāng)前網(wǎng)頁(yè)
// @param sender The object that sent this message.
- (IBAction)reload:(nullable id)sender;

//重新加載當(dāng)前網(wǎng)頁(yè),如果可能的話嵌灰,使用緩存驗(yàn)證條件對(duì)內(nèi)容進(jìn)行端到端重新驗(yàn)證弄匕。
// @result A new navigation representing the reload.
- (nullable WKNavigation *)reloadFromOrigin;

//重新加載當(dāng)前網(wǎng)頁(yè),如果可能的話沽瞭,使用緩存驗(yàn)證條件對(duì)內(nèi)容進(jìn)行端到端重新驗(yàn)證迁匠。
- (IBAction)reloadFromOrigin:(nullable id)sender;

//停止加載當(dāng)前頁(yè)面上的所有資源。
- (void)stopLoading;

//停止加載當(dāng)前頁(yè)面上的所有資源。
- (IBAction)stopLoading:(nullable id)sender;

2.1.8 管理網(wǎng)頁(yè)的下載相關(guān)

API:

//開(kāi)始在請(qǐng)求中的URL處下載資源城丧。
- (void)startDownloadUsingRequest:(NSURLRequest *)request completionHandler:(void(^)(WKDownload *))completionHandler

//恢復(fù)失敗或取消的下載延曙。
- (void)resumeDownloadFromResumeData:(NSData *)resumeData completionHandler:(void(^)(WKDownload *))completionHandler

2.1.9 查看視圖的信息

API:

與web視圖關(guān)聯(lián)的滾動(dòng)視圖。
@property (nonatomic, readonly, strong) UIScrollView *scrollView;

//頁(yè)面標(biāo)題
// @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

//用于評(píng)估當(dāng)前網(wǎng)頁(yè)的信任程度的信任管理對(duì)象枝缔。
@property (nonatomic, readonly, nullable) SecTrustRef serverTrust

//一個(gè)布爾值,指示web視圖是否通過(guò)安全加密的連接加載頁(yè)面上的所有資源蚊惯。
@property (nonatomic, readonly) BOOL hasOnlySecureContent;

//系統(tǒng)從網(wǎng)頁(yè)中第一個(gè)有效的元標(biāo)簽獲得的主題顏色愿卸。
@property (nonatomic, readonly, nullable) UIColor *themeColor 

//web視圖在活動(dòng)頁(yè)面后面顯示的顏色,當(dāng)用戶滾動(dòng)到頁(yè)面邊界以外時(shí)可見(jiàn)截型。
@property (nonatomic, null_resettable, copy) UIColor *underPageBackgroundColor

2.1.10 縮放內(nèi)容

API:

//縮放因子趴荸,web視圖根據(jù)其邊界縮放內(nèi)容。
@property (nonatomic) CGFloat pageZoom

//一個(gè)布爾值菠劝,指示是否放大手勢(shì)會(huì)改變網(wǎng)頁(yè)視圖的放大赊舶。
@property (nonatomic) BOOL allowsMagnification;

//頁(yè)面內(nèi)容當(dāng)前縮放的因子睁搭。
@property (nonatomic) CGFloat magnification;

//縮放頁(yè)面內(nèi)容并將結(jié)果居中于指定的點(diǎn)赶诊。
- (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;

2.1.11 網(wǎng)頁(yè)與媒體的互動(dòng)

API:

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

//獲取web視圖中媒體的播放狀態(tài)园骆。
- (void)requestMediaPlaybackStateWithCompletionHandler:(void (^)(WKMediaPlaybackState))completionHandler

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

//關(guān)閉web視圖顯示的所有媒體,包括圖中圖視頻和全屏視頻锌唾。
- (void)closeAllMediaPresentationsWithCompletionHandler:(void (^_Nullable)(void))completionHandler

2.1.12 管理麥克風(fēng)和攝像頭

API:

//枚舉屬性锄码,指示網(wǎng)頁(yè)是否正在使用攝像機(jī)捕捉圖像或視頻。
@property (nonatomic, readonly) WKMediaCaptureState cameraCaptureState

//枚舉屬性晌涕,指示網(wǎng)頁(yè)是否使用麥克風(fēng)捕捉音頻滋捶。
@property (nonatomic, readonly) WKMediaCaptureState microphoneCaptureState

//設(shè)置網(wǎng)頁(yè)是否使用相機(jī)捕捉圖像或視頻。
- (void)setCameraCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//設(shè)置網(wǎng)頁(yè)是否使用麥克風(fēng)捕捉音頻余黎。
- (void)setMicrophoneCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//一種枚舉重窟,描述媒體設(shè)備(如照相機(jī)或麥克風(fēng))當(dāng)前是否捕獲音頻或視頻。
typedef NS_ENUM(NSInteger, WKMediaCaptureState) {
    WKMediaCaptureStateNone,
    WKMediaCaptureStateActive,
    WKMediaCaptureStateMuted,
}

2.1.13 搜索當(dāng)前頁(yè)面的內(nèi)容

API:

//在web視圖的內(nèi)容中搜索指定的字符串惧财。
- (void)findString:(NSString *)string withConfiguration:(nullable WKFindConfiguration *)configuration completionHandler:(void (^)(WKFindResult *result))completionHandler

說(shuō)明:

  • WKFindConfiguration是搜索web視圖內(nèi)容時(shí)使用的配置參數(shù)巡扇。
  • WKFindResult包含搜索web視圖內(nèi)容的結(jié)果的對(duì)象。

2.1.14 網(wǎng)頁(yè)之間的導(dǎo)航

API:

//一個(gè)布爾值垮衷,指示水平滑動(dòng)手勢(shì)是否會(huì)觸發(fā)前后頁(yè)面導(dǎo)航厅翔。
//默認(rèn)為NO
@property (nonatomic) BOOL allowsBackForwardNavigationGestures;

//一個(gè)對(duì)象,用來(lái)管理以前加載的網(wǎng)頁(yè)列表搀突,web視圖使用它來(lái)進(jìn)行向前和向后導(dǎo)航刀闷。
@property (nonatomic, readonly, strong) WKBackForwardList *backForwardList;

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

//后退一個(gè)網(wǎng)頁(yè)
- (IBAction)goBack:(nullable id)sender;

//向前一個(gè)網(wǎng)頁(yè)
- (nullable WKNavigation *)goForward;

//向前一個(gè)網(wǎng)頁(yè)
- (IBAction)goForward:(nullable id)sender;

//導(dǎo)航到歷史網(wǎng)頁(yè)列表中的某一個(gè)網(wǎng)頁(yè)
- (nullable WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;

//一個(gè)布爾值,指示前向列表中是否存在有效的后向項(xiàng)。
@property (nonatomic, readonly) BOOL canGoBack;

//一個(gè)布爾值甸昏,指示前向列表中是否存在有效的前向項(xiàng)戈次。
@property (nonatomic, readonly) BOOL canGoForward;

//一個(gè)布爾值,它決定按下鏈接是否顯示鏈接目的地的預(yù)覽筒扒。
@property (nonatomic) BOOL allowsLinkPreview

//一個(gè)對(duì)象怯邪,用來(lái)捕獲web視圖中當(dāng)前的交互狀態(tài),以便以后可以將該狀態(tài)恢復(fù)到另一個(gè)web視圖中花墩。//WKWebView的交互狀態(tài)(前向列表悬秉,當(dāng)前加載的頁(yè)面,滾動(dòng)位置冰蘑,表單數(shù)據(jù)…
//可以在另一個(gè)WKWebView中檢索和設(shè)置恢復(fù)狀態(tài)和泌。
@property (nonatomic, nullable, copy) id interactionState

2.1.15 執(zhí)行JavaScript

API:

//執(zhí)行JavaScript腳本
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

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

//將指定的字符串作為異步JavaScript函數(shù)執(zhí)行祠肥。
- (void)callAsyncJavaScript:(NSString *)functionBody arguments:(nullable NSDictionary<NSString *, id> *)arguments inFrame:(nullable WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^ _Nullable)(_Nullable_result id, NSError * _Nullable error))completionHandler

2.1.16 獲取Web View的內(nèi)容

API:

//從web視圖的內(nèi)容異步生成一個(gè)平臺(tái)原生圖像武氓。
- (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(UIImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler

//從web視圖的內(nèi)容異步生成PDF數(shù)據(jù)。
- (void)createPDFWithConfiguration:(nullable WKPDFConfiguration *)pdfConfiguration completionHandler:(void (^)(NSData * _Nullable pdfDocumentData, NSError * _Nullable error))completionHandler

//異步創(chuàng)建web視圖內(nèi)容的web存檔仇箱。
- (void)createWebArchiveDataWithCompletionHandler:(void (^)(NSData *, NSError *))completionHandler

//返回打印web視圖內(nèi)容時(shí)使用的打印操作對(duì)象县恕。
- (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo

說(shuō)明:

  • WKSnapshotConfiguration是當(dāng)從web視圖的內(nèi)容生成圖像時(shí)使用的配置數(shù)據(jù)。
  • WKPDFConfiguration是當(dāng)生成web視圖內(nèi)容的PDF表示時(shí)使用的配置數(shù)據(jù)剂桥。

2.2 WKUIDelegate

WKUIDelegate提供了網(wǎng)頁(yè)呈現(xiàn)本地用戶界面元素的方法忠烛,Web視圖用戶界面委托實(shí)現(xiàn)該協(xié)議來(lái)控制新窗口的打開(kāi),增加用戶單擊元素時(shí)顯示的默認(rèn)菜單項(xiàng)的行為权逗,并執(zhí)行其他與用戶界面相關(guān)的任務(wù)美尸。默認(rèn)的web視圖實(shí)現(xiàn)假設(shè)每個(gè)web視圖有一個(gè)窗口,所以非常規(guī)的用戶界面可能實(shí)現(xiàn)一個(gè)用戶界面委托斟薇。
常見(jiàn)的就是進(jìn)行彈框處理或者新開(kāi)辟一個(gè)WKWebView师坎。

2.2.1 創(chuàng)建和關(guān)閉Web視圖

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

//通知你的應(yīng)用程序DOM窗口成功關(guān)閉。
- (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內(nèi)容中的文件上傳控件的配置細(xì)節(jié)惶岭。
WKOpenPanelParameters

2.2.4 顯示上下文菜單

//告訴委托上下文菜單交互開(kāi)始了。
- webView:contextMenuConfigurationForElement:completionHandler:

//為委托提供動(dòng)畫(huà)對(duì)象犯眠,web視圖使用它來(lái)顯示上下文菜單按灶。
- webView:contextMenuForElement:willCommitWithAnimator:

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

//告訴委托web視圖取消了指定元素的上下文菜單筐咧。
- webView:contextMenuDidEndForElement:

說(shuō)明:

  • UIContextMenuConfiguration包含上下文菜單配置細(xì)節(jié)的對(duì)象鸯旁。

2.2.5 請(qǐng)求的權(quán)限

//確定安全源對(duì)象描述的web資源是否可以訪問(wèn)設(shè)備的方向和運(yùn)動(dòng)噪矛。
- webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:

//確定安全源對(duì)象描述的web資源是否可以訪問(wèn)設(shè)備的麥克風(fēng)音頻和攝像機(jī)視頻。
- webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:

//設(shè)備資源訪問(wèn)的可能權(quán)限決定的枚舉铺罢。
typedef NS_ENUM(NSInteger, WKPermissionDecision) {
    WKPermissionDecisionPrompt,
    WKPermissionDecisionGrant,
    WKPermissionDecisionDeny,
}

//列舉可捕獲音頻艇挨、視頻或兩者的媒體設(shè)備類(lèi)型的枚舉。
typedef NS_ENUM(NSInteger, WKMediaCaptureType) {
    WKMediaCaptureTypeCamera,
    WKMediaCaptureTypeMicrophone,
    WKMediaCaptureTypeCameraAndMicrophone,
}

3韭赘、 web視圖的配置

3.1 WKWebViewConfiguration

WKWebViewConfiguration是用來(lái)初始化web視圖的屬性集合缩滨。提供了關(guān)于如何配置WKWebView對(duì)象的信息。
你在你的代碼中創(chuàng)建一個(gè)WKWebViewConfiguration對(duì)象泉瞻,配置它的屬性脉漏,并將它傳遞給你的WKWebView對(duì)象的初始化器。
web視圖只在創(chuàng)建時(shí)包含您的配置設(shè)置;以后不能動(dòng)態(tài)更改這些設(shè)置

作用:

  • 用于您的web內(nèi)容的初始cookie
  • 您的web內(nèi)容使用的任何自定義URL方案的處理程序
  • 設(shè)置如何處理媒體內(nèi)容設(shè)置如何處理媒體內(nèi)容
  • 有關(guān)如何在web視圖中管理選擇的信息
  • 自定義腳本注入到網(wǎng)頁(yè)
  • 決定如何呈現(xiàn)內(nèi)容的自定義規(guī)則

3.1.1 配置Web View的行為

API:

@property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore

說(shuō)明:

  • 用于獲取和設(shè)置站點(diǎn)cookie以及跟蹤緩存數(shù)據(jù)對(duì)象的對(duì)象袖牙。
  • 用作Cookie的設(shè)置

API:

@property (nonatomic, strong) WKUserContentController *userContentController;

說(shuō)明:

  • 該對(duì)象協(xié)調(diào)應(yīng)用程序的本地代碼與網(wǎng)頁(yè)的腳本和其他內(nèi)容之間的交互侧巨。
  • 用作web與native交互

API:

@property (nonatomic, strong) WKProcessPool *processPool;

說(shuō)明:

  • web內(nèi)容的進(jìn)程池
  • 當(dāng)一個(gè)web視圖被初始化時(shí),一個(gè)新的web內(nèi)容進(jìn)程將從指定的池或已有的進(jìn)程中創(chuàng)建
  • 這個(gè)對(duì)象協(xié)調(diào)web視圖用來(lái)渲染它的web內(nèi)容和執(zhí)行腳本的進(jìn)程鞭达。

API:

@property (nullable, nonatomic, copy) NSString *applicationNameForUserAgent

說(shuō)明:

  • 出現(xiàn)在用戶代理字符串中的應(yīng)用程序名稱司忱。

API:

@property (nonatomic) BOOL limitsNavigationsToAppBoundDomains

說(shuō)明:

  • 一個(gè)布爾值,指示web視圖是否限制導(dǎo)航到應(yīng)用程序域內(nèi)的頁(yè)面畴蹭。

3.1.2 配置Web視圖的首選項(xiàng)

API:

@property (nonatomic, strong) WKPreferences *preferences;

說(shuō)明:

  • 管理web視圖的首選項(xiàng)相關(guān)設(shè)置的對(duì)象坦仍。

API:

@property (null_resettable, nonatomic, copy) WKWebpagePreferences *defaultWebpagePreferences

說(shuō)明:

  • 加載和呈現(xiàn)內(nèi)容時(shí)要使用的默認(rèn)首選項(xiàng)。

3.1.3 為自定義URL方案添加處理程序

API:

- (void)setURLSchemeHandler:(nullable id <WKURLSchemeHandler>)urlSchemeHandler forURLScheme:(NSString *)urlScheme

說(shuō)明:

  • 注冊(cè)一個(gè)對(duì)象以加載與指定URL方案關(guān)聯(lián)的資源撮胧。
  • 設(shè)置URL模式的處理對(duì)象

API:

- (nullable id <WKURLSchemeHandler>)urlSchemeHandlerForURLScheme:(NSString *)urlScheme

說(shuō)明:

  • 返回指定URL模式當(dāng)前注冊(cè)的處理程序?qū)ο蟆?/li>

3.1.4 配置呈現(xiàn)行為

API:

@property (nonatomic) BOOL ignoresViewportScaleLimits

說(shuō)明:

  • 一個(gè)布爾值桨踪,決定網(wǎng)頁(yè)視圖是否允許縮放網(wǎng)頁(yè)。
  • 默認(rèn)為NO

API:

@property (nonatomic) BOOL suppressesIncrementalRendering;

說(shuō)明:

  • 一個(gè)布爾值芹啥,指示web視圖是否在內(nèi)容完全加載到內(nèi)存之前抑制內(nèi)容呈現(xiàn)。
  • 默認(rèn)為NO

3.1.5 設(shè)置媒體播放首選項(xiàng)

API:

@property (nonatomic) BOOL allowsInlineMediaPlayback;

說(shuō)明:

  • 一個(gè)布爾值铺峭,指示HTML5視頻是內(nèi)聯(lián)播放還是使用本機(jī)全屏控制器墓怀。

API:

@property (nonatomic) BOOL allowsAirPlayForMediaPlayback

說(shuō)明:

  • 一個(gè)布爾值,指示web視圖是否允許通過(guò)AirPlay播放媒體卫键。

API:

@property (nonatomic) BOOL allowsPictureInPictureMediaPlayback

說(shuō)明:

  • 指示是否可以播放HTML5視頻
  • 默認(rèn)為YES

API:

@property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback

說(shuō)明:

  • 需要用戶手勢(shì)才能開(kāi)始播放的媒體類(lèi)型傀履。

API:

typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) {
    WKAudiovisualMediaTypeNone = 0,
    WKAudiovisualMediaTypeAudio = 1 << 0,
    WKAudiovisualMediaTypeVideo = 1 << 1,
    WKAudiovisualMediaTypeAll = NSUIntegerMax
}

說(shuō)明:

  • 需要用戶手勢(shì)才能開(kāi)始播放的媒體類(lèi)型。

3.1.6 確定數(shù)據(jù)類(lèi)型

API:

@property (nonatomic) WKDataDetectorTypes dataDetectorTypes 

說(shuō)明:

  • 應(yīng)用于web視圖內(nèi)容的數(shù)據(jù)檢測(cè)器類(lèi)型莉炉。
  • WKDataDetectorTypes是數(shù)據(jù)檢測(cè)器類(lèi)型類(lèi)

3.1.7 設(shè)置選擇的粒度

API:

@property (nonatomic) WKSelectionGranularity selectionGranularity;

typedef NS_ENUM(NSInteger, WKSelectionGranularity) {
    WKSelectionGranularityDynamic,
    WKSelectionGranularityCharacter,
}

說(shuō)明:

  • 用戶可以交互地選擇web視圖內(nèi)容的粒度級(jí)別钓账。
  • 默認(rèn)值為WKSelectionGranularityDynamic。
  • WKSelectionGranularity枚舉用戶可以選擇和修改web視圖內(nèi)容的粒度絮宁。

3.1.8 選擇用戶界面的方向性

API:

@property (nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy

typedef NS_ENUM(NSInteger, WKUserInterfaceDirectionPolicy) {
    WKUserInterfaceDirectionPolicyContent,
    WKUserInterfaceDirectionPolicySystem,
}

說(shuō)明:

  • 用戶界面元素的方向性梆暮。
  • WKUserInterfaceDirectionPolicy枚舉在web視圖中決定用戶界面元素的方向性的策略

3.2 WKWindowFeatures

一個(gè)WKWindowFeatures對(duì)象包含一個(gè)網(wǎng)頁(yè)從其包含的web視圖請(qǐng)求的屬性。绍昂,用來(lái)顯示網(wǎng)頁(yè)請(qǐng)求其窗口的相關(guān)屬性啦粹。
不能直接創(chuàng)建WKWindowFeatures對(duì)象偿荷。當(dāng)一個(gè)導(dǎo)航操作導(dǎo)致一個(gè)新的web視圖的顯示,WKWebView創(chuàng)建這個(gè)對(duì)象唠椭,并把它傳遞給它的UI委托對(duì)象的webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:方法跳纳。委托使用此對(duì)象中的信息來(lái)配置并返回新的web視圖。

檢查窗口的位置和尺寸:

一個(gè)布爾值贪嫂,指示是否使包含的窗口可調(diào)整大小寺庄。
@property (nullable, nonatomic, readonly) NSNumber *allowsResizing;

檢查可見(jiàn)性屬性:

一個(gè)布爾值,指示網(wǎng)頁(yè)是否請(qǐng)求可見(jiàn)的菜單欄力崇。
@property (nullable, nonatomic, readonly) NSNumber *menuBarVisibility;

一個(gè)布爾值铣揉,指示網(wǎng)頁(yè)是否請(qǐng)求可見(jiàn)的狀態(tài)欄。
@property (nullable, nonatomic, readonly) NSNumber *statusBarVisibility;

一個(gè)布爾值餐曹,指示網(wǎng)頁(yè)是否請(qǐng)求可見(jiàn)工具欄逛拱。
@property (nullable, nonatomic, readonly) NSNumber *toolbarsVisibility;

3.3 WKProcessPool

WKProcessPool對(duì)象表示W(wǎng)ebKit用來(lái)管理web內(nèi)容的單個(gè)進(jìn)程。一個(gè)不透明的token台猴,用來(lái)在一個(gè)進(jìn)程中運(yùn)行多個(gè)web視圖朽合。

為了提供更安全穩(wěn)定的體驗(yàn),WebKit在獨(dú)立的進(jìn)程中渲染web視圖的內(nèi)容饱狂,而不是在你的應(yīng)用程序的進(jìn)程空間中曹步。

默認(rèn)情況下,WebKit給每個(gè)web視圖自己的進(jìn)程空間休讳,直到它達(dá)到實(shí)現(xiàn)定義的進(jìn)程限制讲婚。在此之后,具有相同WKProcessPool對(duì)象的web視圖共享相同的web內(nèi)容進(jìn)程俊柔。

如果你的應(yīng)用程序創(chuàng)建了多個(gè)web視圖筹麸,將相同的WKProcessPool對(duì)象分配給可能安全地共享一個(gè)進(jìn)程空間的web視圖。實(shí)例化這個(gè)類(lèi)的一個(gè)實(shí)例雏婶,并將它分配給每個(gè)web視圖的WKWebViewConfiguration對(duì)象的processPool屬性物赶。

不提供任何屬性和方法

3.4 WKPreferences

使用WKPreferences對(duì)象來(lái)指定您的網(wǎng)站的首選項(xiàng),包括最小字體大小留晚、JavaScript行為和處理欺詐網(wǎng)站的行為酵紫。它封裝了應(yīng)用于網(wǎng)站的標(biāo)準(zhǔn)行為。

創(chuàng)建這個(gè)對(duì)象错维,并將它分配給你用來(lái)創(chuàng)建web視圖的WKWebViewConfiguration對(duì)象的preferences屬性奖地。

3.4.1 設(shè)置渲染的偏好

API:

@property (nonatomic) CGFloat minimumFontSize;

說(shuō)明:

  • 最小字體大小,以點(diǎn)為單位赋焕。

API:

@property (nonatomic) BOOL tabFocusesLinks

說(shuō)明:

  • 一個(gè)布爾值参歹,指示按下tab鍵是否將焦點(diǎn)更改為鏈接和表單控件。

3.4.2 設(shè)置Java和JavaScript首選項(xiàng)

API:

javaScriptCanOpenWindowsAutomatically

說(shuō)明:

  • 一個(gè)布爾值宏邮,指示JavaScript是否可以在沒(méi)有用戶交互的情況下打開(kāi)窗口。

3.4.3 設(shè)置fraud警告首選項(xiàng)

API:

@property (nonatomic, getter=isFraudulentWebsiteWarningEnabled) BOOL fraudulentWebsiteWarningEnabled

說(shuō)明:

  • 一個(gè)布爾值,指示web視圖是否對(duì)可疑的欺詐內(nèi)容(如惡意軟件或網(wǎng)絡(luò)釣魚(yú))顯示警告澜汤。

3.5 WKWebpagePreferences

指定加載和呈現(xiàn)頁(yè)面內(nèi)容時(shí)使用的行為的對(duì)象。當(dāng)你想改變你的web視圖的默認(rèn)呈現(xiàn)行為時(shí)捎泻,創(chuàng)建一個(gè)WKWebpagePreferences對(duì)象。
通常笆豁,iOS設(shè)備呈現(xiàn)web內(nèi)容是為了移動(dòng)體驗(yàn)闯狱,而Mac設(shè)備呈現(xiàn)內(nèi)容是為了桌面體驗(yàn)哄孤。

3.5.1 設(shè)置JavaScript首選項(xiàng)

API:

@property (nonatomic) BOOL allowsContentJavaScript

說(shuō)明:

  • 一個(gè)布爾值吹截,指示是否允許運(yùn)行來(lái)自web內(nèi)容的JavaScript瘦陈。

3.5.2 設(shè)置首選內(nèi)容模式

API:

@property (nonatomic) WKContentMode preferredContentMode

typedef NS_ENUM(NSInteger, WKContentMode) {
    WKContentModeRecommended,
    WKContentModeMobile,
    WKContentModeDesktop
}

說(shuō)明:

  • 網(wǎng)頁(yè)視圖在加載和呈現(xiàn)網(wǎng)頁(yè)時(shí)使用的內(nèi)容模式。
  • WKContentMode指示如何呈現(xiàn)web視圖內(nèi)容的常量

4波俄、 數(shù)據(jù)管理

4.1 WKWebsiteDataStore

使用WKWebsiteDataStore對(duì)象來(lái)配置和管理網(wǎng)站數(shù)據(jù)晨逝。用于管理cookie、磁盤(pán)和內(nèi)存緩存以及web視圖的其他類(lèi)型的數(shù)據(jù)懦铺。

作用:

  • 管理網(wǎng)站使用的cookies
  • 了解網(wǎng)站存儲(chǔ)的數(shù)據(jù)類(lèi)型
  • 刪除不需要的網(wǎng)站數(shù)據(jù)

4.1.1 創(chuàng)建數(shù)據(jù)存儲(chǔ)對(duì)象

API:

+ (WKWebsiteDataStore *)defaultDataStore;

說(shuō)明:

  • 返回默認(rèn)數(shù)據(jù)存儲(chǔ)
  • 該存儲(chǔ)將數(shù)據(jù)持久地存儲(chǔ)到磁盤(pán)

API:

+ (WKWebsiteDataStore *)nonPersistentDataStore;

說(shuō)明:

  • 創(chuàng)建一個(gè)新的非持久的數(shù)據(jù)存儲(chǔ)對(duì)象捉貌,該對(duì)象將網(wǎng)站數(shù)據(jù)存儲(chǔ)在內(nèi)存中,而不是將數(shù)據(jù)寫(xiě)入磁盤(pán)冬念。
  • 實(shí)現(xiàn)“隱私瀏覽”很有用

4.1.2 檢查數(shù)據(jù)存儲(chǔ)屬性

API:

@property (nonatomic, readonly, getter=isPersistent) BOOL persistent;

說(shuō)明:

  • 一個(gè)布爾值趁窃,指示該對(duì)象是否將數(shù)據(jù)存儲(chǔ)到磁盤(pán)。

4.1.3 檢索Cookie Store

API:

@property (nonatomic, readonly) WKHTTPCookieStore *httpCookieStore

說(shuō)明:

  • 管理網(wǎng)站的HTTP cookie的對(duì)象刘急。

4.1.4 檢索特定類(lèi)型的數(shù)據(jù)

API:

- (void)fetchDataRecordsOfTypes:(NSSet<NSString *> *)dataTypes completionHandler:(void (^)(NSArray<WKWebsiteDataRecord *> *))completionHandler

說(shuō)明:

  • 從數(shù)據(jù)存儲(chǔ)中獲取指定的記錄類(lèi)型棚菊。

API:

+ (NSSet<NSString *> *)allWebsiteDataTypes;

說(shuō)明:

  • 返回所有可用數(shù)據(jù)類(lèi)型的集合。

4.1.5 刪除特定類(lèi)型的數(shù)據(jù)

API:

- (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes forDataRecords:(NSArray<WKWebsiteDataRecord *> *)dataRecords completionHandler:(void (^)(void))completionHandler;

說(shuō)明:

  • 從一個(gè)或多個(gè)數(shù)據(jù)記錄中刪除指定的網(wǎng)站數(shù)據(jù)類(lèi)型叔汁。

API:

- (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes modifiedSince:(NSDate *)date completionHandler:(void (^)(void))completionHandler;

說(shuō)明:

  • 刪除在指定日期之后更改的網(wǎng)站數(shù)據(jù)据块。

4.2 WKWebsiteDataRecord

使用WKWebsiteDataRecord對(duì)象來(lái)發(fā)現(xiàn)網(wǎng)站存儲(chǔ)的信息類(lèi)型。一個(gè)特定網(wǎng)站持久存儲(chǔ)的數(shù)據(jù)記錄己莺。

記錄識(shí)別網(wǎng)站存儲(chǔ)的數(shù)據(jù)類(lèi)型思杯,但不識(shí)別實(shí)際數(shù)據(jù)。您可以使用這些信息來(lái)幫助用戶管理網(wǎng)站數(shù)據(jù)。例如嘲碱,Safari為用戶提供了查看和刪除網(wǎng)站數(shù)據(jù)的方法离咐。每個(gè)記錄的域名包含網(wǎng)站的域名和后綴。

我們不能直接創(chuàng)建WKWebsiteDataRecord對(duì)象。WebKit創(chuàng)建這些記錄并將它們存儲(chǔ)在web視圖的數(shù)據(jù)存儲(chǔ)中梧宫。

使用該數(shù)據(jù)存儲(chǔ)的fetchDataRecordsOfTypes:completionHandler:來(lái)檢索當(dāng)前記錄對(duì)象忌卤。還可以使用該對(duì)象刪除不需要的記錄笤闯。

4.2.1 獲取記錄信息

API:

@property (nonatomic, readonly, copy) NSString *displayName;

說(shuō)明:

  • 數(shù)據(jù)記錄的顯示名稱脱衙。

4.2.2 獲取數(shù)據(jù)類(lèi)型

API:

@property (nonatomic, readonly, copy) NSSet<NSString *> *dataTypes;

說(shuō)明:

  • 與記錄相關(guān)聯(lián)的數(shù)據(jù)類(lèi)型鹃锈。

4.3 WKHTTPCookieStore

管理與特定web視圖相關(guān)的HTTP cookie的對(duì)象。
使用WKHTTPCookieStore為您的網(wǎng)頁(yè)指定初始cookie,并管理網(wǎng)頁(yè)內(nèi)容的cookie辫封。例如欣福,當(dāng)用戶退出時(shí),可以使用此對(duì)象刪除當(dāng)前會(huì)話的cookie。要檢測(cè)網(wǎng)頁(yè)何時(shí)改變cookie笛匙,請(qǐng)使用addObserver:方法安裝一個(gè)cookie觀察者获枝。

不需要直接創(chuàng)建wkhttpcookestore對(duì)象。相反,從web視圖的配置對(duì)象的WKWebsiteDataStore對(duì)象中檢索這個(gè)對(duì)象。

4.3.1 管理cookie

API:

- (void)getAllCookies:(void (^)(NSArray<NSHTTPCookie *> *))completionHandler;

說(shuō)明:

  • 異步獲取所有存儲(chǔ)的cookie寸认,并將它們交付給指定的完成處理程序。

API:

- (void)setCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler;

說(shuō)明:

  • 將一個(gè)cookie添加到cookieStore上。

API:

- (void)deleteCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler

說(shuō)明:

  • 刪除指定的cookie。

4.3.2 觀察Cookie Store的變化

API:

- (void)addObserver:(id<WKHTTPCookieStoreObserver>)observer;

說(shuō)明:

  • 向cookie存儲(chǔ)添加一個(gè)觀察者

API:

- (void)removeObserver:(id<WKHTTPCookieStoreObserver>)observer;

說(shuō)明:

  • 從cookie存儲(chǔ)中移除一個(gè)觀察者。
  • WKHTTPCookieStoreObserver提供在監(jiān)控網(wǎng)頁(yè)cookies變化的對(duì)象中采用的方法

4.4 WKURLSchemeHandler

一個(gè)加載資源的協(xié)議,加載的URL模式并不能被WebKit 處理,也就是加載自定義的資源唱歧。在對(duì)象中采用WKURLSchemeHandler協(xié)議,為您的web內(nèi)容處理自定義URL方案。

自定義方案允許你將自定義的資源類(lèi)型集成到你的web內(nèi)容中喉刘,你也可以為你的應(yīng)用程序需要的資源定義自定義方案推沸。

在你的應(yīng)用程序?qū)ο笾胁捎眠@個(gè)協(xié)議恨锚,并使用WKWebViewConfiguration的setURLSchemeHandler:forURLScheme:方法注冊(cè)它。

當(dāng)一個(gè)web視圖遇到一個(gè)使用自定義方案的資源時(shí),它會(huì)創(chuàng)建一個(gè)WKURLSchemeTask對(duì)象筹淫,并將它傳遞給你的方案處理程序?qū)ο蟮姆椒ā?/p>

使用webView:startURLSchemeTask:方法開(kāi)始加載資源殊霞。

當(dāng)你的處理器加載這個(gè)對(duì)象時(shí)棒卷,web視圖可能會(huì)調(diào)用你處理器的webView:stopURLSchemeTask:方法來(lái)通知你這個(gè)資源不再需要了苞俘。

加載自定義資源:

//請(qǐng)求處理程序開(kāi)始加載指定資源的數(shù)據(jù)岗憋。
- webView:startURLSchemeTask:

響應(yīng)一個(gè)被取消的資源請(qǐng)求:

//請(qǐng)求處理程序停止加載指定資源的數(shù)據(jù)监徘。
- webView:stopURLSchemeTask:

4.5 WKURLSchemeTask

WKURLSchemeTask協(xié)議定義了WebKit用來(lái)請(qǐng)求自定義資源的接口倦春。
不在自己的對(duì)象中采用這個(gè)接口。相反,WebKit創(chuàng)建了采用這個(gè)接口的對(duì)象,并將它們交付給定制方案處理程序(采用WKURLSchemeHandler協(xié)議的對(duì)象)
你可以使用WebKit提供的對(duì)象來(lái)獲取關(guān)于請(qǐng)求資源的信息并加載它們。您還可以使用這些對(duì)象向WebKit報(bào)告您的進(jìn)度布轿。

說(shuō)明:

  • 當(dāng)WebKit需要一個(gè)自定義方案時(shí)项阴,它會(huì)在任務(wù)的request屬性中放置一個(gè)適當(dāng)?shù)腢RL請(qǐng)求环揽。
  • 在接收到請(qǐng)求后,確定資源的大小庵佣,并使用適當(dāng)?shù)腢RL響應(yīng)對(duì)象調(diào)用didReceiveResponse:方法歉胶。
  • 提供響應(yīng)反映了web服務(wù)器在接收請(qǐng)求時(shí)的行為。
  • 加載資源數(shù)據(jù)的一部分后巴粪,調(diào)用didReceiveData:方法將其發(fā)送到WebKit璃氢。
  • 您可以多次調(diào)用該方法以增量地交付數(shù)據(jù)题诵,也可以使用所有數(shù)據(jù)調(diào)用一次绷跑。
  • 在您完成交付所有數(shù)據(jù)之后滑废,調(diào)用didFinish方法诱咏。如果在加載過(guò)程中出現(xiàn)錯(cuò)誤卵蛉,調(diào)用didFailWithError:來(lái)報(bào)告它。

5、 導(dǎo)航相關(guān)

5.1 WKNavigationDelegate

WKNavigationDelegate提供用于接受或拒絕導(dǎo)航更改的方法梆掸,以及用于跟蹤導(dǎo)航請(qǐng)求的進(jìn)度的方法聊训。用來(lái)協(xié)調(diào)web視圖主框架中的變化的對(duì)象中實(shí)現(xiàn)WKNavigationDelegate協(xié)議的方法。當(dāng)用戶試圖導(dǎo)航web內(nèi)容時(shí),web視圖與它的導(dǎo)航委托協(xié)調(diào)來(lái)管理任何轉(zhuǎn)換。

作用:

  • 限制內(nèi)容中特定鏈接的導(dǎo)航
  • 跟蹤請(qǐng)求的進(jìn)度枕磁,并響應(yīng)錯(cuò)誤和身份驗(yàn)證挑戰(zhàn)

5.1.1 允許或拒絕導(dǎo)航請(qǐng)求

API:

- webView:decidePolicyForNavigationAction:preferences:decisionHandler:

說(shuō)明:

  • 請(qǐng)求委托獲得根據(jù)指定首選項(xiàng)和操作信息導(dǎo)航到新內(nèi)容的權(quán)限筝蚕。

API:

- webView:decidePolicyForNavigationAction:decisionHandler:

說(shuō)明:

  • 請(qǐng)求委托授予根據(jù)指定操作信息導(dǎo)航到新內(nèi)容的權(quán)限橘忱。
  • WKNavigationActionPolicy指示是否允許或取消從操作導(dǎo)航到網(wǎng)頁(yè)的常量

API:

- webView:decidePolicyForNavigationResponse:decisionHandler:

說(shuō)明:

  • 請(qǐng)求委托在知道導(dǎo)航請(qǐng)求的響應(yīng)后導(dǎo)航到新內(nèi)容的權(quán)限虑乖。
  • WKNavigationResponsePolicy指示是否允許或取消從響應(yīng)導(dǎo)航到網(wǎng)頁(yè)的常量

5.1.2 跟蹤請(qǐng)求的加載進(jìn)度

API:

- webView:didStartProvisionalNavigation:

說(shuō)明:

  • 告訴委托主體框架的導(dǎo)航已經(jīng)啟動(dòng)遂跟。

API:

- webView:didReceiveServerRedirectForProvisionalNavigation:

說(shuō)明:

  • 告訴委托web視圖收到了一個(gè)請(qǐng)求的服務(wù)器重定向逃沿。

API:

- webView:didCommitNavigation:

說(shuō)明:

  • 告訴委托web視圖已經(jīng)開(kāi)始接收主體框架的內(nèi)容。

API:

- webView:didFinishNavigation:

說(shuō)明:

  • 告訴委托導(dǎo)航已經(jīng)完成幻锁。

5.1.3 響應(yīng)認(rèn)證挑戰(zhàn)

API:

- webView:didReceiveAuthenticationChallenge:completionHandler:

說(shuō)明:

  • 請(qǐng)求委托響應(yīng)身份驗(yàn)證質(zhì)詢凯亮。

API:

- webView:authenticationChallenge:shouldAllowDeprecatedTLS:

說(shuō)明:

  • 詢問(wèn)委托是否繼續(xù)使用已棄用的TLS版本的連接。

5.1.4 響應(yīng)導(dǎo)航錯(cuò)誤

API:

- webView:didFailNavigation:withError:

說(shuō)明:

  • 告訴委托導(dǎo)航期間發(fā)生錯(cuò)誤哄尔。

API:

- webView:didFailProvisionalNavigation:withError:

說(shuō)明:

  • 告訴委托在早期導(dǎo)航過(guò)程中發(fā)生了錯(cuò)誤假消。

API:

- webViewWebContentProcessDidTerminate:

說(shuō)明:

  • 告訴委托web視圖的內(nèi)容過(guò)程被終止。

5.1.5 處理下載進(jìn)度

API:

webView:navigationResponse:didBecomeDownload:

說(shuō)明:

  • 告訴委托導(dǎo)航響應(yīng)變成了下載岭接。

API:

- webView:navigationAction:didBecomeDownload:

說(shuō)明:

  • 告訴委托導(dǎo)航操作變成了下載富拗。

5.2 WKBackForwardList

使用WKBackForwardList對(duì)象來(lái)檢索web視圖之前加載的頁(yè)面臼予。用來(lái)管理以前加載的網(wǎng)頁(yè)列表,web視圖使用它來(lái)進(jìn)行向前和向后導(dǎo)航啃沪。

通常粘拾,不會(huì)直接創(chuàng)建WKBackForwardList對(duì)象。每個(gè)web視圖自動(dòng)創(chuàng)建一個(gè)创千,并使用它來(lái)存儲(chǔ)所有加載頁(yè)面的歷史記錄缰雇。
從web視圖的backForwardList屬性中獲取這個(gè)對(duì)象,并使用它的內(nèi)容來(lái)方便編程導(dǎo)航追驴。

5.2.1 獲取最近的項(xiàng)

//當(dāng)前項(xiàng)之前的項(xiàng)
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *backItem;

//當(dāng)前項(xiàng)
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *currentItem;

//當(dāng)前項(xiàng)之后的項(xiàng)
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *forwardItem;

5.2.2 獲取列表中的特定項(xiàng)

- (nullable WKBackForwardListItem *)itemAtIndex:(NSInteger)index;

說(shuō)明:

  • 返回與當(dāng)前項(xiàng)相對(duì)偏移量處的項(xiàng)械哟。

5.2.3 獲得子列表

//當(dāng)前項(xiàng)之前的項(xiàng)數(shù)組。
@property (nonatomic, readonly, copy) NSArray<WKBackForwardListItem *> *backList;

//當(dāng)前項(xiàng)之后的項(xiàng)數(shù)組氯檐。
@property (nonatomic, readonly, copy) NSArray<WKBackForwardListItem *> *forwardList;

5.3 WKBackForwardListItem

使用wkbackforwardlisttitem對(duì)象來(lái)獲取以前訪問(wèn)過(guò)的網(wǎng)頁(yè)的信息戒良。網(wǎng)頁(yè)視圖先前訪問(wèn)過(guò)的網(wǎng)頁(yè)項(xiàng)。
該對(duì)象標(biāo)識(shí)頁(yè)面的標(biāo)題和URL冠摄。它還標(biāo)識(shí)了請(qǐng)求該網(wǎng)頁(yè)的URL糯崎。您不需要直接創(chuàng)建wkbackforwardlisttitem對(duì)象。相反河泳,當(dāng)web視圖加載新頁(yè)面時(shí)沃呢,WKBackForwardList對(duì)象會(huì)將它們與其關(guān)聯(lián)的web視圖一起創(chuàng)建。

獲取特定于頁(yè)面的信息:

- (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;

獲取請(qǐng)求頁(yè)面:

//最初請(qǐng)求web視圖加載此頁(yè)面的源URL拆挥。
@property (readonly, copy) NSURL *initialURL;

5.4 WKNavigation

WKNavigation對(duì)象唯一標(biāo)識(shí)一個(gè)網(wǎng)頁(yè)的加載請(qǐng)求薄霜。跟蹤網(wǎng)頁(yè)加載進(jìn)度的對(duì)象。
當(dāng)你請(qǐng)求web視圖加載內(nèi)容或?qū)Ш降巾?yè)面時(shí)纸兔,web視圖會(huì)返回一個(gè)WKNavigation對(duì)象來(lái)識(shí)別你的請(qǐng)求惰瓜。
隨著加載操作的進(jìn)行,web視圖將該操作的進(jìn)度報(bào)告給它的導(dǎo)航委托的各種方法汉矿,并將匹配的WKNavigation對(duì)象傳遞給它們崎坊。

獲取內(nèi)容模式:

WebKit用來(lái)加載網(wǎng)頁(yè)的內(nèi)容模式。
@property (nonatomic, readonly) WKContentMode effectiveContentMode

5.5 WKNavigationAction

使用一個(gè)WKNavigationAction對(duì)象來(lái)決定是否允許在你的應(yīng)用程序的web視圖中導(dǎo)航洲拇。包含有關(guān)導(dǎo)致導(dǎo)航發(fā)生的操作的信息奈揍。
你不能直接創(chuàng)建WKNavigationAction對(duì)象。相反赋续,web視圖創(chuàng)建它們并將它們傳遞給適當(dāng)?shù)奈袑?duì)象男翰。使用委托的方法來(lái)分析操作纽乱,并決定是否允許產(chǎn)生導(dǎo)航蛾绎。

5.5.1 獲取導(dǎo)航類(lèi)型

API:

@property (nonatomic, readonly) WKNavigationType navigationType;

說(shuō)明:

  • 觸發(fā)導(dǎo)航的操作類(lèi)型话原。

API:

typedef NS_ENUM(NSInteger, WKNavigationType) {
    WKNavigationTypeLinkActivated,
    WKNavigationTypeFormSubmitted,
    WKNavigationTypeBackForward,
    WKNavigationTypeReload,
    WKNavigationTypeFormResubmitted,
    WKNavigationTypeOther = -1,
}

說(shuō)明:

  • 觸發(fā)導(dǎo)航的操作類(lèi)型稚矿。

5.5.2 檢查導(dǎo)航信息

API:

@property (nonatomic, readonly, copy) NSURLRequest *request;

說(shuō)明:

  • 與導(dǎo)航操作關(guān)聯(lián)的URL請(qǐng)求對(duì)象。

API:

@property (nonatomic, readonly, copy) WKFrameInfo *sourceFrame;

說(shuō)明:

  • 請(qǐng)求導(dǎo)航的框架处嫌。

API:

@property (nullable, nonatomic, readonly, copy) WKFrameInfo *targetFrame;

說(shuō)明:

  • 在其中顯示新內(nèi)容的框架。

5.5.3 檢查用戶操作

API:

@property (nonatomic, readonly) NSInteger buttonNumber;

說(shuō)明:

  • 引起導(dǎo)航請(qǐng)求的鼠標(biāo)按鈕的數(shù)量。

API:

@property (nonatomic, readonly) NSEventModifierFlags modifierFlags;

說(shuō)明:

  • 在導(dǎo)航請(qǐng)求時(shí)按下的修改鍵坛缕。

5.6 WKNavigationResponse

使用WKNavigationResponse對(duì)象來(lái)決定是否允許在你的應(yīng)用程序的web視圖中導(dǎo)航墓猎。包含對(duì)導(dǎo)航請(qǐng)求的響應(yīng)的對(duì)象,用于制定與導(dǎo)航相關(guān)的策略決策赚楚。
你不能直接創(chuàng)建WKNavigationResponse對(duì)象毙沾。相反,web視圖創(chuàng)建它們并將它們傳遞給適當(dāng)?shù)奈袑?duì)象宠页。使用委托的方法來(lái)分析響應(yīng)左胞,并決定是否允許產(chǎn)生導(dǎo)航。

5.6.1 獲取響應(yīng)詳細(xì)信息

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

5.6.2 獲取額外的響應(yīng)信息

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

//一個(gè)布爾值举户,指示響應(yīng)是否針對(duì)web視圖的主框架烤宙。
@property (nonatomic, readonly, getter=isForMainFrame) BOOL forMainFrame;

6、 下載

6.1 WKDownload

表示web資源下載的對(duì)象俭嘁。

6.2 WKDownloadDelegate

您實(shí)現(xiàn)的用于跟蹤下載進(jìn)度和處理重定向躺枕、身份驗(yàn)證挑戰(zhàn)和失敗的協(xié)議。

6.2.1 跟蹤下載進(jìn)度

API:

- download:decideDestinationUsingResponse:suggestedFilename:completionHandler:

說(shuō)明:

  • 請(qǐng)求委托提供一個(gè)文件目的地供填,系統(tǒng)應(yīng)在此寫(xiě)入下載數(shù)據(jù)拐云。

API:

- downloadDidFinish:

說(shuō)明:

  • 告訴委托下載完成。

API:

- download:didFailWithError:resumeData:

說(shuō)明:

  • 告訴委托下載失敗捕虽,并提供錯(cuò)誤信息和可用于重新啟動(dòng)下載的數(shù)據(jù)慨丐。

6.2.2 響應(yīng)授權(quán)挑戰(zhàn)

API:

- download:didReceiveAuthenticationChallenge:completionHandler:

說(shuō)明:

  • 請(qǐng)求委托響應(yīng)身份驗(yàn)證質(zhì)詢。

API:

WKDownloadRedirectPolicy

說(shuō)明:

  • 帶有指示是否繼續(xù)重定向的用例的枚舉泄私。

6.2.3 對(duì)重定向

API:

- download:willPerformHTTPRedirection:newRequest:decisionHandler:

說(shuō)明:

  • 請(qǐng)求委托響應(yīng)下載的重定向響應(yīng)房揭。

API:

WKDownloadRedirectPolicy

說(shuō)明:

  • 帶有指示是否繼續(xù)重定向的用例的枚舉。

7晌端、 網(wǎng)頁(yè)內(nèi)容的處理

7.1 WKUserContentController

WKUserContentController對(duì)象提供了你的應(yīng)用程序和運(yùn)行在web視圖中的JavaScript代碼之間的橋梁捅暴。用于管理JavaScript代碼和web視圖之間的交互,以及過(guò)濾web視圖中的內(nèi)容咧纠。

創(chuàng)建并配置一個(gè)WKUserContentController對(duì)象蓬痒,作為整個(gè)web視圖設(shè)置的一部分。在創(chuàng)建web視圖之前漆羔,將該對(duì)象分配給你的WKWebViewConfiguration對(duì)象的userContentController屬性

過(guò)程:

  1. 將JavaScript代碼注入到web視圖中運(yùn)行的網(wǎng)頁(yè)中梧奢。
  2. 安裝自定義JavaScript函數(shù)來(lái)調(diào)用應(yīng)用的本地代碼。
  3. 指定自定義過(guò)濾器演痒,以防止網(wǎng)頁(yè)加載受限制的內(nèi)容亲轨。

7.1.1 添加和刪除自定義腳本

API:

- (void)addUserScript:(WKUserScript *)userScript;

說(shuō)明:

  • 注入指定的腳本到網(wǎng)頁(yè)的內(nèi)容。

API:

- (void)removeAllUserScripts;

說(shuō)明:

  • 從web視圖中刪除所有用戶腳本鸟顺。

API:

@property (nonatomic, readonly, copy) NSArray<WKUserScript *> *userScripts;

說(shuō)明:

  • 與用戶內(nèi)容控制器相關(guān)聯(lián)的用戶腳本惦蚊。

7.1.2 添加和刪除消息處理程序

API:

- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;

說(shuō)明:

  • 添加可以從JavaScript代碼調(diào)用的消息回調(diào)處理程序器虾。

API:

- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler contentWorld:(WKContentWorld *)world name:(NSString *)name

說(shuō)明:

  • 安裝一個(gè)消息處理程序,您可以從JavaScript代碼中指定的內(nèi)容世界中調(diào)用它蹦锋。

API:

- (void)addScriptMessageHandlerWithReply:(id <WKScriptMessageHandlerWithReply>)scriptMessageHandlerWithReply contentWorld:(WKContentWorld *)contentWorld name:(NSString *)name

說(shuō)明:

  • 安裝一個(gè)消息處理程序兆沙,該處理程序向JavaScript代碼返回一個(gè)回復(fù)。

API:

- (void)removeScriptMessageHandlerForName:(NSString *)name;

說(shuō)明:

  • 從JavaScript代碼中卸載指定名稱的自定義消息處理程序莉掂。

API:

- (void)removeScriptMessageHandlerForName:(NSString *)name contentWorld:(WKContentWorld *)contentWorld

說(shuō)明:

  • 從JavaScript代碼中指定的內(nèi)容世界中卸載自定義消息處理程序葛圃。

API:

- (void)removeAllScriptMessageHandlersFromContentWorld:(WKContentWorld *)contentWorld

說(shuō)明:

  • 從JavaScript代碼中指定的內(nèi)容世界中卸載所有定制消息處理程序。

API:

- (void)removeAllScriptMessageHandlers

說(shuō)明:

  • 卸載與用戶內(nèi)容控制器關(guān)聯(lián)的所有自定義消息處理程序巫湘。

API:

WKScriptMessageHandler

說(shuō)明:

  • 一個(gè)從運(yùn)行在網(wǎng)頁(yè)中的JavaScript代碼中接收消息的接口装悲。

API:

WKScriptMessageHandlerWithReply

說(shuō)明:

  • 用于響應(yīng)網(wǎng)頁(yè)中運(yùn)行的JavaScript代碼的消息的接口。

7.1.3 添加和刪除內(nèi)容規(guī)則

API:

- (void)addContentRuleList:(WKContentRuleList *)contentRuleList

說(shuō)明:

  • 將指定的內(nèi)容規(guī)則列表添加到內(nèi)容控制器對(duì)象尚氛。

API:

- (void)removeContentRuleList:(WKContentRuleList *)contentRuleList

說(shuō)明:

  • 從內(nèi)容控制器對(duì)象中移除指定的規(guī)則列表诀诊。

API:

- (void)removeAllContentRuleLists

說(shuō)明:

  • 從內(nèi)容控制器中移除所有規(guī)則列表。

API:

WKContentRuleList

說(shuō)明:

  • 一個(gè)用于web內(nèi)容的規(guī)則列表阅嘶。

7.2 WKContentRuleListStore

使用WKContentRuleListStore來(lái)編譯和管理web視圖中過(guò)濾內(nèi)容的規(guī)則属瓣。包含如何在web視圖中加載和過(guò)濾內(nèi)容的規(guī)則。
規(guī)則列表在你的應(yīng)用程序中扮演著內(nèi)容攔截器的角色讯柔。你可以使用它們來(lái)阻止web視圖加載特定的內(nèi)容抡蛙,無(wú)論是基于該內(nèi)容的原始位置還是其他你指定的標(biāo)準(zhǔn).

說(shuō)明:

  • 獲取默認(rèn)的WKContentRuleListStore對(duì)象或創(chuàng)建一個(gè)自定義的store對(duì)象,并使用它來(lái)編譯或訪問(wèn)可用的規(guī)則魂迄。
  • 每個(gè)store對(duì)象將其現(xiàn)有規(guī)則持久地存儲(chǔ)在文件系統(tǒng)中粗截,并在創(chuàng)建時(shí)加載這些規(guī)則。
  • 一個(gè)store對(duì)象不會(huì)自動(dòng)應(yīng)用它的任何規(guī)則到一個(gè)特定的web視圖捣炬。要將規(guī)則應(yīng)用到web視圖熊昌,需要將其添加到web視圖配置對(duì)象的WKUserContentController對(duì)象中。

7.2.1 創(chuàng)建內(nèi)容規(guī)則列表存儲(chǔ)

API:

+ defaultStore

說(shuō)明:

  • 返回默認(rèn)的內(nèi)容規(guī)則列表存儲(chǔ)區(qū)湿酸。

API:

+ storeWithURL:

說(shuō)明:

  • 在指定目錄中創(chuàng)建一個(gè)新的內(nèi)容規(guī)則列表存儲(chǔ)區(qū)婿屹。

7.2.2 創(chuàng)建和刪除內(nèi)容規(guī)則列表

API:

compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:

說(shuō)明:

  • 將指定的JSON內(nèi)容編譯成一個(gè)新規(guī)則列表,并將其添加到當(dāng)前數(shù)據(jù)存儲(chǔ)區(qū)推溃。

API:

- removeContentRuleListForIdentifier:completionHandler:

說(shuō)明:

  • 從當(dāng)前數(shù)據(jù)存儲(chǔ)異步移除規(guī)則列表昂利。

7.2.3 訪問(wèn)當(dāng)前規(guī)則列表

API:

- getAvailableContentRuleListIdentifiers:

說(shuō)明:

  • 異步獲取存儲(chǔ)中所有規(guī)則列表的標(biāo)識(shí)符。

API:

- lookUpContentRuleListForIdentifier:completionHandler:

說(shuō)明:

  • 異步搜索數(shù)據(jù)存儲(chǔ)中的特定規(guī)則列表铁坎。

7.3 WKContentWorld

使用WKContentWorld對(duì)象作為命名空間蜂奸,將你的應(yīng)用程序的web環(huán)境與你執(zhí)行的單個(gè)網(wǎng)頁(yè)或腳本的環(huán)境分開(kāi)。
定義JavaScript代碼執(zhí)行范圍的對(duì)象硬萍,用于防止不同腳本之間的沖突扩所。
內(nèi)容世界有助于防止兩個(gè)腳本以沖突的方式修改環(huán)境變量時(shí)發(fā)生的問(wèn)題。在自己的內(nèi)容世界中執(zhí)行腳本有效地為它提供了一個(gè)單獨(dú)的環(huán)境變量的副本來(lái)修改襟铭。

說(shuō)明:

  • WKContentWorld對(duì)象是一個(gè)命名空間,不會(huì)在當(dāng)前web視圖或網(wǎng)頁(yè)之外持久化數(shù)據(jù)。
  • 如果你在兩個(gè)WKWebView對(duì)象中使用相同的內(nèi)容世界寒砖,一個(gè)web視圖的內(nèi)容世界中的變量不會(huì)出現(xiàn)在另一個(gè)web視圖中赐劣。
  • 類(lèi)似地,當(dāng)用戶或你的應(yīng)用程序?qū)Ш降揭粋€(gè)新網(wǎng)頁(yè)時(shí)哩都,前一頁(yè)的變量消失了魁兼,即使兩個(gè)頁(yè)面共享相同的內(nèi)容世界焕妙。
  • 使用這個(gè)類(lèi)的方法和屬性來(lái)獲取所需的內(nèi)容世界寄啼。
  • WKContentWorld為你的應(yīng)用程序提供了一個(gè)默認(rèn)的內(nèi)容世界,并為當(dāng)前網(wǎng)頁(yè)提供了一個(gè)內(nèi)容世界蠢挡。您還可以創(chuàng)建新的內(nèi)容世界儒鹿。例如化撕,您可以為您管理的每個(gè)JavaScript擴(kuò)展創(chuàng)建一個(gè)自定義內(nèi)容世界。在配置或執(zhí)行與內(nèi)容相關(guān)聯(lián)的腳本時(shí)指定內(nèi)容世界對(duì)象约炎。

作用場(chǎng)景:

  1. 你有復(fù)雜的腳本邏輯來(lái)連接你的web內(nèi)容到你的應(yīng)用程序植阴,但是你的web內(nèi)容有自己復(fù)雜的腳本庫(kù)。在這種情況下圾浅,為特定于應(yīng)用程序的腳本使用一個(gè)內(nèi)容世界掠手,為特定于內(nèi)容的腳本使用一個(gè)單獨(dú)的內(nèi)容世界。
  2. 您實(shí)現(xiàn)了一個(gè)支持JavaScript擴(kuò)展的web瀏覽器狸捕。在這種情況下喷鸽,為每個(gè)擴(kuò)展創(chuàng)建一個(gè)獨(dú)特的內(nèi)容世界,以防止擴(kuò)展之間的沖突灸拍。

7.3.1 獲取默認(rèn)內(nèi)容世界

客戶端的默認(rèn)世界做祝。
defaultClientWorld

7.3.2 獲取當(dāng)前頁(yè)面的名稱空間

當(dāng)前網(wǎng)頁(yè)內(nèi)容的內(nèi)容世界。
pageWorld

7.3.3 檢索自定義內(nèi)容世界

返回具有指定名稱的自定義內(nèi)容世界株搔。
+ worldWithName:

自定義內(nèi)容世界的名稱剖淀。
name

7.4 WKFrameInfo

包含網(wǎng)頁(yè)上某一框架信息的對(duì)象。該類(lèi)的一個(gè)實(shí)例是一個(gè)臨時(shí)的纤房、僅包含數(shù)據(jù)的對(duì)象纵隔。它不能跨多個(gè)委托方法調(diào)用惟一地標(biāo)識(shí)一個(gè)框架。

檢查框架的信息:

一個(gè)布爾值炮姨,指示該框架是網(wǎng)站的主框架還是子框架捌刮。
mainFrame

框架的當(dāng)前請(qǐng)求。
request

框架的安全源舒岸。
securityOrigin

7.5 WKSecurityOrigin

WKSecurityOrigin對(duì)象是一個(gè)臨時(shí)的绅作、僅包含數(shù)據(jù)的對(duì)象,它標(biāo)識(shí)與特定資源相關(guān)聯(lián)的主機(jī)名蛾派、協(xié)議和端口號(hào)俄认。
你不能直接創(chuàng)建WKSecurityOrigin對(duì)象个少。相反,WebKit為它加載的資源創(chuàng)建了它們眯杏。第一方加載是指與請(qǐng)求網(wǎng)站具有相同安全源的任何加載URL夜焦。第一方的網(wǎng)頁(yè)可以訪問(wèn)彼此的資源,如腳本和數(shù)據(jù)庫(kù)岂贩。

因?yàn)閃KSecurityOrigin對(duì)象是瞬態(tài)的茫经,所以它不能在多個(gè)委托方法調(diào)用之間唯一地標(biāo)識(shí)安全源。

獲取主機(jī)信息:

host

port

獲取主機(jī)協(xié)議:

protocol

7.6 WKUserScript

webView注入網(wǎng)頁(yè)的腳本萎津。當(dāng)你想將自定義腳本代碼注入到你的web視圖頁(yè)面時(shí)卸伞,創(chuàng)建一個(gè)WKUserScript對(duì)象。
使用此對(duì)象指定要注入的JavaScript代碼锉屈,以及與何時(shí)以及如何注入該代碼相關(guān)的參數(shù)荤傲。在你創(chuàng)建web視圖之前,把這個(gè)對(duì)象添加到與你的web視圖配置相關(guān)的WKUserContentController對(duì)象中部念。

7.6.1 創(chuàng)建用戶腳本對(duì)象

API:

- (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly;

說(shuō)明:

  • 創(chuàng)建包含指定源代碼和屬性的用戶腳本對(duì)象弃酌。

API:

- (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly inContentWorld:(WKContentWorld *)contentWorld

說(shuō)明:

  • 創(chuàng)建一個(gè)用戶腳本對(duì)象,該對(duì)象的范圍是特定的內(nèi)容世界儡炼。

7.6.2 檢查腳本的信息

//腳本的源代碼妓湘。
@property (nonatomic, readonly, copy) NSString *source;

//將腳本注入網(wǎng)頁(yè)的時(shí)間。
@property (nonatomic, readonly) WKUserScriptInjectionTime injectionTime;

//將腳本內(nèi)容注入網(wǎng)頁(yè)的時(shí)間常數(shù)乌询。
typedef NS_ENUM(NSInteger, WKUserScriptInjectionTime) {
    WKUserScriptInjectionTimeAtDocumentStart,
    WKUserScriptInjectionTimeAtDocumentEnd
}

//一個(gè)布爾值榜贴,指示是將腳本注入到主框架還是所有框架。
@property (nonatomic, readonly, getter=isForMainFrameOnly) BOOL forMainFrameOnly;

8妹田、 網(wǎng)頁(yè)搜索

8.1 WKFindConfiguration

是搜索web視圖內(nèi)容時(shí)使用的配置參數(shù)唬党。
創(chuàng)建一個(gè)WKFindConfiguration對(duì)象,并配置它的屬性來(lái)指定如何在web視圖的內(nèi)容中執(zhí)行搜索鬼佣。要啟動(dòng)搜索驶拱,調(diào)用WKWebView的適當(dāng)方法,并將該對(duì)象與搜索字符串一起傳遞晶衷。

配置搜索參數(shù):

//一個(gè)布爾值蓝纲,指示相對(duì)于當(dāng)前選擇的搜索方向。默認(rèn)為NO
@property (nonatomic) BOOL backwards;

//一個(gè)布爾值晌纫,指示在匹配搜索字符串時(shí)是否考慮大小寫(xiě)税迷。默認(rèn)為NO
@property (nonatomic) BOOL caseSensitive;

//一個(gè)布爾值,指示搜索是否繞到頁(yè)面的另一側(cè)锹漱。默認(rèn)為YES
@property (nonatomic) BOOL wraps;

8.2 WKFindResult

包含搜索web視圖內(nèi)容的結(jié)果的對(duì)象箭养。
當(dāng)你使用WKWebView的方法執(zhí)行搜索時(shí),web view會(huì)創(chuàng)建一個(gè)WKFindResult對(duì)象哥牍,并將其交付給你的完成處理程序毕泌。您不需要直接創(chuàng)建該類(lèi)的實(shí)例喝检。使用web視圖提供的對(duì)象來(lái)確定它是否找到了匹配的內(nèi)容。

獲取搜索結(jié)果:

//一個(gè)布爾值撼泛,指示web視圖在搜索過(guò)程中是否找到匹配蛇耀。
@property (nonatomic, readonly) BOOL matchFound;

9、 上下文菜單

9.1 WKContextMenuElementInfo

WKContextMenuElementInfo對(duì)象包含web視圖內(nèi)容中鏈接的URL坎弯。包含有關(guān)用戶在網(wǎng)頁(yè)中單擊的鏈接的信息的對(duì)象,您可以使用該對(duì)象為該鏈接配置上下文菜單译暂。

您不需要直接創(chuàng)建該類(lèi)的實(shí)例抠忘。相反,當(dāng)用戶與鏈接交互時(shí)外永,web視圖會(huì)創(chuàng)建它們崎脉,并將它們傳遞給與之關(guān)聯(lián)的WKUIDelegate對(duì)象的方法。在委托方法實(shí)現(xiàn)中伯顶,使用此對(duì)象中的URL來(lái)確定如何配置上下文菜單囚灼。

獲取元素信息:

//用戶單擊的鏈接的URL。
@property (nonatomic, readonly, nullable) NSURL *linkURL;

10祭衩、 快照配置

10.1 WKSnapshotConfiguration

當(dāng)從web視圖的內(nèi)容生成圖像時(shí)使用的配置數(shù)據(jù)灶体。
當(dāng)你想要根據(jù)web視圖的內(nèi)容生成圖像時(shí),創(chuàng)建一個(gè)WKSnapshotConfiguration對(duì)象掐暮。使用此對(duì)象指定web視圖中要捕獲的部分和捕獲行為蝎抽。

要生成快照,請(qǐng)將配置對(duì)象傳遞給WKWebView的takeSnapshotWithConfiguration:completionHandler:方法路克,該方法返回一個(gè)平臺(tái)原生映像供您使用樟结。

指定快照尺寸:

//你的web視圖要捕獲的部分,指定為視圖坐標(biāo)系統(tǒng)中的一個(gè)矩形精算。
@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.
//默認(rèn)為YES
@property (nonatomic) BOOL afterScreenUpdates

10.2 WKPDFConfiguration

當(dāng)生成web視圖內(nèi)容的PDF表示時(shí)使用的配置數(shù)據(jù)瓢宦。
當(dāng)你想要生成一個(gè)PDF版本的web視圖內(nèi)容時(shí),創(chuàng)建一個(gè)WKPDFConfiguration對(duì)象灰羽。
使用此對(duì)象指定web視圖中要捕獲的部分驮履。要生成PDF內(nèi)容,將配置對(duì)象傳遞給WKWebView的createPDF(configuration:completionHandler:)方法谦趣,該方法返回PDF數(shù)據(jù)供您使用疲吸。

指定快照尺寸:

//你的web視圖要捕獲的部分,指定為視圖坐標(biāo)系統(tǒng)中的一個(gè)矩形前鹅。
@property (nonatomic) CGRect rect
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末摘悴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舰绘,更是在濱河造成了極大的恐慌蹂喻,老刑警劉巖葱椭,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異口四,居然都是意外死亡孵运,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)蔓彩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)治笨,“玉大人,你說(shuō)我怎么就攤上這事赤嚼】趵担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵更卒,是天一觀的道長(zhǎng)等孵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹂空,這世上最難降的妖魔是什么俯萌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮上枕,結(jié)果婚禮上咐熙,老公的妹妹穿的比我還像新娘。我一直安慰自己辨萍,他們只是感情好糖声,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著分瘦,像睡著了一般蘸泻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘲玫,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天悦施,我揣著相機(jī)與錄音,去河邊找鬼去团。 笑死抡诞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的土陪。 我是一名探鬼主播昼汗,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鬼雀!你這毒婦竟也來(lái)了顷窒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞋吉,沒(méi)想到半個(gè)月后鸦做,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谓着,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年泼诱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赊锚。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡治筒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舷蒲,到底是詐尸還是另有隱情矢炼,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布阿纤,位于F島的核電站,受9級(jí)特大地震影響夷陋,放射性物質(zhì)發(fā)生泄漏欠拾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一骗绕、第九天 我趴在偏房一處隱蔽的房頂上張望藐窄。 院中可真熱鬧,春花似錦酬土、人聲如沸荆忍。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)刹枉。三九已至,卻和暖如春屈呕,著一層夾襖步出監(jiān)牢的瞬間微宝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工虎眨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟋软,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓嗽桩,卻偏偏與公主長(zhǎng)得像岳守,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碌冶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容