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ǔ)充
- WebKit結(jié)構(gòu)認(rèn)識(shí)
- web視圖認(rèn)識(shí)
- web視圖的配置
- 數(shù)據(jù)管理
- 導(dǎo)航相關(guān)
- 下載
- 網(wǎng)頁(yè)內(nèi)容的處理
- 網(wǎng)頁(yè)搜索
- 上下文菜單
- 快照配置
1宫仗、WebKit結(jié)構(gòu)認(rèn)識(shí)
使用WebKit框架將樣式豐富的web內(nèi)容集成到應(yīng)用程序的原生內(nèi)容中够挂。WebKit為web界面提供了完整的瀏覽體驗(yàn)。
通過(guò)WebKit框架可以完成一系列事情:
- 使用HTML藕夫、CSS和JavaScript顯示豐富的web內(nèi)容循未;
- 處理頁(yè)面內(nèi)容的更多的加載過(guò)程休雌;
- 顯示多個(gè)MIME類(lèi)型和復(fù)合框架元素;
- 在內(nèi)容頁(yè)面之間導(dǎo)航;
- 管理最近訪問(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í)行基于文本的搜索铡恕。
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ò)程:
- 將JavaScript代碼注入到web視圖中運(yùn)行的網(wǎng)頁(yè)中梧奢。
- 安裝自定義JavaScript函數(shù)來(lái)調(diào)用應(yīng)用的本地代碼。
- 指定自定義過(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)景:
- 你有復(fù)雜的腳本邏輯來(lái)連接你的web內(nèi)容到你的應(yīng)用程序植阴,但是你的web內(nèi)容有自己復(fù)雜的腳本庫(kù)。在這種情況下圾浅,為特定于應(yīng)用程序的腳本使用一個(gè)內(nèi)容世界掠手,為特定于內(nèi)容的腳本使用一個(gè)單獨(dú)的內(nèi)容世界。
- 您實(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