確定WebKit
是否可以加載內(nèi)容
+ (BOOL)handlesURLScheme:(NSString*)urlScheme
返回WebKIT是否支持用特定URL方案加載資源
WKWebView
允許設(shè)置請(qǐng)求攔截,但是只允許攔截自定義Scheme
的請(qǐng)求,不允許http
,https
,ftp
,file
的請(qǐng)求,所以可以通過[WKWebView handlesURLScheme:]
來判斷scheme是否已經(jīng)被WKWebView
默認(rèn)處理了
初始化 webview
1.1 @property(nonatomic, readonly, copy) WKWebViewConfiguration *configuration
用于初始化web視圖的配置的副本
用WKWebViewConfiguration您可以確定網(wǎng)頁(yè)呈現(xiàn)的時(shí)間,如何處理媒體回放等其他
只有在初始化WKWebView的時(shí)候設(shè)置configuration,并不能在WKWebView創(chuàng)建后去修改configuration
1.2 initWithFrame:configuration:
返回指定frame和配置初始化的Web視圖
這是一個(gè)接受自定義WKWebVIEW配置的指定初始化器。初始化器復(fù)制指定的配置。初始化Web視圖之后更改配置對(duì)象configuration對(duì)Web視圖沒有影響。可以使用initWithFrame:
方法初始化具有默認(rèn)配置的實(shí)例。查看默認(rèn)值的WKWebVIEW配置
Inspecting the View Information 查看視圖信息
2.1 scrollView
@property(nonatomic, readonly, strong) UIScrollView *scrollView;
只讀的,與Web
視圖關(guān)聯(lián)的滾動(dòng)視圖
webview
可以滑動(dòng)的原因就是因?yàn)殛P(guān)聯(lián)的scrollview
2.2 title
頁(yè)面的標(biāo)題,一般用于kvo監(jiān)聽得到title用來更新nav標(biāo)題ui的
代碼如下
[self.webView addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:NULL];
2.3 URL
當(dāng)前的url,要在用戶界面中反映的URL,也可以用kvo監(jiān)聽
2.4 customUserAgent
自定義用戶代理字符串
如果沒有設(shè)置自定義用戶代理字符串,則將為nil
Setting Delegates 設(shè)置代理
3.1 navigationDelegate
@property(nonatomic, weak) id<WKNavigationDelegate> navigationDelegate;
這個(gè)協(xié)議的方法能夠讓你實(shí)現(xiàn)觸發(fā)的自定義行為在Web視圖接受、加載和完成導(dǎo)航請(qǐng)求的過程中
WKNavigationDelegate
3.2 UIDelegate
Loading Content 加載內(nèi)容
4.1 estimatedProgress
當(dāng)前導(dǎo)航加載的進(jìn)度
一般用于kvo
監(jiān)聽,監(jiān)聽加載進(jìn)度,做一些加載的ui處理,它的值是 0.0 - 1.0
,當(dāng)完全加載完(加載的內(nèi)容包括包括主要文件及其所有潛在的子資源)的時(shí)候它的值就為1.0
4.2 hasOnlySecureContent
一個(gè)布爾值,指示頁(yè)上的所有資源是否已通過安全加密連接加載
也是一般用于kvo
監(jiān)聽
4.2 loadHTMLString:baseURL:
設(shè)置網(wǎng)頁(yè)內(nèi)容和基本URL
參數(shù)1:網(wǎng)頁(yè)內(nèi)容的字符串
參數(shù)2:用于解析文檔中的相對(duì)URL
一般我們都是這個(gè)方法加載本地的html 內(nèi)容
WKWebView 在iOS 9 有新的加載本地方法- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL API_AVAILABLE(macosx(10.11), ios(9.0));.但是我看了網(wǎng)上有一些博客說- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;并不能加載本地html文件.其實(shí)兩者都能加載.只是需要把路徑寫對(duì).第一個(gè)方法就不過多敘述了.網(wǎng)上有很多的博客.這里我就用第二個(gè)方法來看一下如何加載
NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"index.html"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[_mainWebView loadRequest: request];
4.2 loading
指示視圖當(dāng)前是否加載內(nèi)容的布爾值
可以用于kvo
監(jiān)聽,如果還在加載內(nèi)容則為true
,加載完成則為flase
4.3 reload
重新加載當(dāng)前頁(yè)面,
返回重新加載的網(wǎng)頁(yè)的新導(dǎo)航
經(jīng)過測(cè)試:如果webview
加載成功完成之后,調(diào)用此方法,相當(dāng)于重新加載,但是如果是加載失敗之后調(diào)用此方法,此方法就不生效了
4.4 reloadFromOrigin
重新加載當(dāng)前頁(yè)面,如果可能,使用緩存驗(yàn)證條件執(zhí)行端到端重新驗(yàn)證
與reload
不同的是它會(huì)比較網(wǎng)絡(luò)數(shù)據(jù)是否有變化,沒有變化則使用緩存,否則從新請(qǐng)求
經(jīng)過測(cè)試:如果webview
加載成功完成之后,調(diào)用此方法,相當(dāng)于重新加載,但是如果是加載失敗之后調(diào)用此方法,此方法就不生效了
4.4 stopLoading
停止加載當(dāng)前頁(yè)上的所有資源
如果在加載的過程中,調(diào)用此方法,會(huì)進(jìn)入
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error
失敗回調(diào)
4.5 loadData:MIMEType:characterEncodingName:baseURL:
這個(gè)方法跟loadHTMLString:baseURL:
類似,只不過一個(gè)是html的字符內(nèi)容,一個(gè)是html的data的內(nèi)容
說下第二個(gè)參數(shù): MIMEType 文件類型,一般都用@"text/html"
4.6 loadFileURL:allowingReadAccessToURL:
加載 本地文件系統(tǒng)的url
原因是WKWebView是不允許通過的loadRequest的方法來加載本地根目錄的資源文件。
而在iOS9的SDK中加入了以下方法來加載本地的HTML文件:
如果第二個(gè)參數(shù)
引用單個(gè)文件,則只有該文件可以由WebKIT
加載。如果第二個(gè)參數(shù)
引用一個(gè)目錄,那么該文件中的文件可以由WebKit加載
Scaling Content 縮放web內(nèi)容
5.1 allowsMagnification
一個(gè)布爾值,指示放大手勢(shì)是否會(huì)改變Web視圖的放大率
默認(rèn)值為NO
這個(gè)屬性是針對(duì)MAC OS
的不是iPhone
的
5.1 magnification
頁(yè)內(nèi)容當(dāng)前縮放的的比例
默認(rèn)的是1.0
這個(gè)屬性是針對(duì)MAC OS
的不是iPhone
的
5.2 setMagnification:centeredAtPoint:
按指定因子縮放頁(yè)面內(nèi)容,并將結(jié)果集中在指定點(diǎn)上
這個(gè)屬性是針對(duì)MAC OS
的不是iPhone
的
Navigating 導(dǎo)航相關(guān)
6.1 allowsBackForwardNavigationGestures
一個(gè)布爾值,指示水平滑動(dòng)手勢(shì)是否會(huì)觸發(fā)前向列表導(dǎo)航
只針對(duì)側(cè)滑有效
默認(rèn)為NO
6.2 backForwardList
Web視圖的前向列表
是個(gè)WKBackForwardList
的數(shù)組
6.3 canGoBack
一個(gè)布爾值,指示在前退列表中是否存在可以導(dǎo)航到的,如果前退列表中里有可以返回的,則為yes
6.4 canGoForward
一個(gè)布爾值,指示后向列表中是否存在可以導(dǎo)航到
6.5 allowsLinkPreview
確定按下鏈接是否顯示鏈接的目的地的預(yù)覽
從iOS 9開始,在支持3D Touch的設(shè)備中使用WKWebView的allowLinkPreview屬性,WKWebView客戶端就可以選擇基于Peek的鏈接預(yù)覽。當(dāng)allowLinkPreview屬性設(shè)為true時(shí),使用者可以輕輕的按下鏈接來查看,然后在app上的另一個(gè)視圖里加載鏈接,同時(shí)app在背景中模糊顯示。
如果使用者用力按下鏈接,鏈接會(huì)在Safari中彈出
在WKWebView和UIWebView可以設(shè)置屬性allowsLinkPreview來支持WebView的Peek和Pop。
這個(gè)屬性是默認(rèn)設(shè)置為
NO
的如果使用WKWebView或者UIWebView,Pop會(huì)跳轉(zhuǎn)到Safari
如果希望在APP內(nèi)部保證Pop,建議使用SFSafariViewController來替代WKWebView
6.6 goBack
返回
6.7 goForward
前進(jìn)
6.8 goToBackForwardListItem:
返回到指定的item,item屬于backForwardList數(shù)組中
6.9 loadRequest:
加載請(qǐng)求,加載網(wǎng)絡(luò)html
Executing JavaScript 執(zhí)行 JavaScript代碼
7.1 evaluateJavaScript:completionHandler:
執(zhí)行JavaScript
代碼
參數(shù)1:要被執(zhí)行的JavaScript
代碼的字符串
參數(shù)2:執(zhí)行完成或者失敗的block
回調(diào)
這個(gè)completionHandler
是執(zhí)行在主線程的
Taking Snapshots 拍攝快照
8.1 takeSnapshotWithConfiguration:completionHandler:
獲取視圖可見視口的快照