WKWebview官方API整理

需要注意的點:
Call WebKit functions and methods only from your app’s main thread or main dispatch queue.

1砰蠢、WKNavigationDelegate

wkwebview的導(dǎo)航行為徊哑,在webview接受靖榕、加載和完成導(dǎo)航請求過程中觸發(fā)的回調(diào)馍忽。

// 當(dāng)web視圖開始接收web內(nèi)容時調(diào)用
webView:didCommitNavigation:

// 當(dāng)web內(nèi)容開始加載到web視圖時調(diào)用
webView:didStartProvisionalNavigation:

// 當(dāng)web視圖接收到服務(wù)器重定向時調(diào)用
webView:didReceiveServerRedirectForProvisionalNavigation:

//當(dāng)web視圖需要響應(yīng)身份驗證挑戰(zhàn)時調(diào)用
webView:didReceiveAuthenticationChallenge:completionHandler:

// 當(dāng)導(dǎo)航過程中發(fā)生錯誤時調(diào)用
webView:didFailNavigation:withError:

// 當(dāng)web視圖加載內(nèi)容時發(fā)生錯誤時調(diào)用
webView:didFailProvisionalNavigation:withError:

// 導(dǎo)航完成后調(diào)用
webView:didFinishNavigation:

// 當(dāng)Web視圖的Web內(nèi)容過程終止時調(diào)用
webViewWebContentProcessDidTerminate:

// 決定是否允許或取消導(dǎo)航
webView:decidePolicyForNavigationAction:decisionHandler:

// 已知response后佛嬉,決定是否允許或取消導(dǎo)航
webView:decidePolicyForNavigationResponse:decisionHandler:

//優(yōu)先級高于webView:decidePolicyForNavigationAction:decisionHandler:祸轮,多了一個preferences配置
webView:decidePolicyForNavigationAction:preferences:decisionHandler:

打開一個正常的網(wǎng)頁調(diào)用順序是這樣的:
decidePolicyForNavigationAction
didStartProvisionalNavigation
decidePolicyForNavigationResponse
didCommitNavigation
decidePolicyForNavigationAction
didFinishNavigation

decidePolicyForNavigationAction可能會執(zhí)行多次躏筏,因為重定向等原因
2芳室、WKProcessPool

一個WKProcessPool對象专肪,相當(dāng)于一個webcontent隊列池

注意:WK Process Pool對象只是一個不透明的令牌,沒有自己的屬性或方法堪侯。

官方信息:
與web視圖關(guān)聯(lián)的進(jìn)程池由其web視圖配置指定嚎尤。 每個Web視圖都被賦予自己的Web內(nèi)容進(jìn)程,直到達(dá)到實現(xiàn)定義的進(jìn)程限制伍宦;之后芽死,具有相同進(jìn)程池的Web視圖最終共享Web內(nèi)容進(jìn)程乏梁。

所以每個WKWebview都是一個進(jìn)程,默認(rèn)cookie不能共享关贵。所以只能我們手動來實現(xiàn)遇骑,對webview的configuration.processPool進(jìn)行賦值共享。

3揖曾、WKWindowFeatures

當(dāng)請求新的web視圖時落萎,WKWindow Feature對象指定包含窗口的可選屬性。
屬性如下(均為只讀炭剪,指示作用):

allowsResizing: 一個布爾值练链,指示包含的窗口是否應(yīng)該可調(diào)整大小,或者如果未指定可調(diào)整大小奴拦,則為零兑宇。

height
width
x
y

menuBarVisibility: 一個布爾值,指示菜單欄是否應(yīng)該是可見的粱坤,如果沒有指定菜單欄的可見性,則為零瓷产。
statusBarVisibility:一個布爾值站玄,指示statusBar是否可見
toolbarsVisibility:一個布爾值,指示工具欄是否可見

4濒旦、WKWebView

顯示交互式網(wǎng)頁內(nèi)容的對象株旷,例如應(yīng)用程序中的瀏覽器。使用它來嵌入web頁面

WKWebview統(tǒng)一了iOS尔邓,macOS的web功能晾剖,繼承于UIView/NSView
注意:在iOS 8.0以后,使用WKWebView梯嗽,不要再使用UIWebView

提示: 您可以在WKWeb視圖中使用httpBody內(nèi)容進(jìn)行POST請求齿尽。(我看到文章說,loadRequest是不能使用httpBody灯节,會丟失循头,這個下去再看)

使用注意事項:
1、goBack炎疆、goForward方法可作為按鈕點擊事件卡骂,用來允許用戶前進(jìn)、后退形入,canGoBack,canGoForward屬性可用來指示按鈕是否可點擊
2全跨、一般來說,前端頁面的手機(jī)號碼會自動標(biāo)記為可點擊狀態(tài)亿遂,點擊后跳轉(zhuǎn)到撥打頁浓若。想要關(guān)掉的話渺杉,設(shè)置dataDetectorTypes屬性去除掉WKDataDetectorTypePhoneNumber
3、setMagnification:centeredAtPoint:可用來設(shè)置頁面默認(rèn)放大比例七嫌,此后用戶可用手勢放大縮小

//類方法少办,指示wkwebview是否天然的支持此scheme
+handlesURLScheme:

configuration:一個WKWebViewConfiguration copy過來的對象,初始化webview時的屬性集合
//初始化方法
-initWithFrame:configuration:

scrollView:與webview相關(guān)的滑動頁
title:頁面標(biāo)題诵原,一般使用KVO獲取英妓,前端頁面的<title>標(biāo)簽
URL:正在訪問的url
customUserAgent:自定義UA(獲取webviewUA的方法,"navigator.userAgent"绍赛,
大部門時間我們需要添加版本信息等)
serverTrust:SecTrustRef類型蔓纠,用來評估信任的對象,不知道咋用

//兩個代理
navigationDelegate
UIDelegate

estimatedProgress:預(yù)估加載進(jìn)度吗蚌,0~1
hasOnlySecureContent: 一個布爾值腿倚,指示頁面上的所有資源是否已通過安全加密連接加載。
//加載字符串html蚯妇,一般用不到這個方法
//baseURL: 用于解析文檔中的相關(guān)URL的URL,多處用到
-loadHTMLString:baseURL:
loading:指示該webview是否還在加載數(shù)據(jù)
//重載web頁面
-reload
// 重新加載當(dāng)前頁面敷燎,如果可能的話,使用緩存驗證條件執(zhí)行端到端重驗證箩言。
-reloadFromOrigin
//停止加載
-stopLoading
//設(shè)置web頁面內(nèi)容
-loadData:MIMEType:characterEncodingName:baseURL:
//導(dǎo)航到文件系統(tǒng)上請求的文件URL
-loadFileURL:allowingReadAccessToURL:

allowsMagnification:指示是否支持手勢放大縮小硬贯,默認(rèn)為false
magnification:指示當(dāng)前縮放比例
//設(shè)置當(dāng)前縮放比例,縮放中心點
-setMagnification:centeredAtPoint:

allowsBackForwardNavigationGestures: 一個布爾值陨收,指示水平滑動手勢是否會觸發(fā)后向前列表導(dǎo)航
backForwardList:webview向前向后的列表饭豹,WKBackForwardList對象
canGoBack:指示是否可返回
canGoForward:指示是否可前進(jìn)
allowsLinkPreview: 一個布爾值,它確定是否按下鏈接顯示鏈接的目標(biāo)預(yù)覽务漩。
此屬性可用于支持3D觸摸的設(shè)備拄衰。 在iOS10和更高版本中,默認(rèn)值為YES饵骨;在此之前翘悉,默認(rèn)值為NO。
//頁面后退
-goBack
//頁面前進(jìn)
-goForward
//跳轉(zhuǎn)到固定的歷史item宏悦,對象為WKBackForwardListItem
-goToBackForwardListItem:
//跳轉(zhuǎn)到一個requestURL
-loadRequest:
//執(zhí)行一段js代碼及其回調(diào)
-evaluateJavaScript:completionHandler:
// 獲取視圖可見視口的快照 >=11.0
-takeSnapshotWithConfiguration:completionHandler:

5镐确、WKWebViewConfiguration

初始化webview時的屬性集合
只有在初始化wkwebview是才管用。配置完成后饼煞,修改配置不起作用源葫。

applicationNameForUserAgent: 設(shè)置UA中的APP名稱,默認(rèn)為Safari/605.1.15砖瞧、Mobile/15E148等
preferences:(WKPreferences) web視圖要使用的首選項對象息堂。
processPool: 獲取視圖的Web Content過程的進(jìn)程池。
userContentController:(WKUserContentController) 與webview關(guān)聯(lián)的用戶內(nèi)容控制器
websiteDataStore:(WKWebsiteDataStore) 網(wǎng)站數(shù)據(jù)存儲,供webview使用

ignoresViewportScaleLimits:指示用戶是否總是可以縮放
默認(rèn)為false荣堰,該屬性會覆蓋掉網(wǎng)頁中的user-scalable HTML屬性

suppressesIncrementalRendering:默認(rèn)為false
指示W(wǎng)ebView是否抑制內(nèi)容呈現(xiàn)床未,直到它完全加載到內(nèi)存中。

allowsInlineMediaPlayback:
指示HTML5視頻是內(nèi)聯(lián)播放還是使用本機(jī)全屏控制器振坚。ipad默認(rèn)為true薇搁,iPhone默認(rèn)為false
true:內(nèi)聯(lián)播放視頻
false以使用本機(jī)全屏控制器
在iPhone上的HTML文檔中添加視頻元素時,還必須包含playsinline屬性渡八。
(注意:在iOS10.0之前創(chuàng)建的應(yīng)用程序必須使用webkit-playsinline屬性啃洋。)

allowsAirPlayForMediaPlayback:指示是否支持視頻播放的投屏(AirPlay),默認(rèn)為true
allowsPictureInPictureMediaPlayback:指示是否支持視頻播放的畫中畫模式
默認(rèn)為true屎鳍,(畫中畫為小窗口)
mediaTypesRequiringUserActionForPlayback:(WKAudiovisualMediaTypes)
確定哪種視頻類型需要手勢才能播放
WKAudiovisualMediaTypes:多媒體類型宏娄,有none,音頻逮壁,視頻孵坚,all

selectionGranularity:(WKSelectionGranularity)
 用戶可以在web視圖中交互選擇內(nèi)容的粒度級別。
默認(rèn)為動態(tài)的窥淆。

dataDetectorTypes:(WKDataDetectorTypes) 所需的數(shù)據(jù)檢測類型卖宠,默認(rèn)為null
指定數(shù)據(jù)檢測類型值可以增加與該值匹配的網(wǎng)頁內(nèi)容的交互性。

userInterfaceDirectionPolicy:(WKUserInterfaceDirectionPolicy)
設(shè)置用戶界面元素的方向策略
content:默認(rèn)的忧饭,方向性遵循CSS/HTML/XHTML規(guī)范
system: 方向性遵循視圖的用戶界面布局方向?qū)傩?
//設(shè)置scheme的自定義請求逗堵,貌似也可以用來用來做資源替換
-setURLSchemeHandler:forURLScheme:
-urlSchemeHandlerForURLScheme:

defaultWebpagePreferences:此枚舉默認(rèn)值為 WKContentModeRecommended,
在 iPhone 和 iPad mini 上映射為 WKContentModeMobile
在其他 iPad 上則為 WKContentModeDesktop
因此 iPad 上打開網(wǎng)頁默認(rèn)顯示桌面版本(即電腦版)
表現(xiàn)為UA不同
6眷昆、WKPreferences

封裝webview的首選項設(shè)置
webview的首選項被webview configuration指定

minimumFontSize:頁面最小字體,默認(rèn)為0(誰傻到去配置這個)
tabFocusesLinks:無介紹
javaScriptCanOpenWindowsAutomatically:iOS默認(rèn)為false汁咏,macOS為true
指示Java腳本是否可以在沒有用戶交互的情況下打開窗口
javaScriptEnabled:默認(rèn)值是YES亚斋。 將此屬性設(shè)置為NO禁用由網(wǎng)頁加載或執(zhí)行的Java腳本。 
此設(shè)置不影響用戶腳本攘滩。 參見 WKUserContentController

fraudulentWebsiteWarningEnabled:啟動欺詐網(wǎng)絡(luò)警告(iOS 13+)
7帅刊、WKUIDelegate

提供了網(wǎng)頁呈現(xiàn)在客戶端中的方法回調(diào)

創(chuàng)建一個新的webview時回調(diào)
webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:

前端調(diào)用彈窗時的三種回調(diào),我們一般使用TextInput來模擬callback
webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:
webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:
webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:

通知APP dom窗口已經(jīng)關(guān)閉
webViewDidClose:

顯示文件上傳面板漂问,如果不實現(xiàn)赖瞒,點擊上傳的效果就跟取消一樣
webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:

8、WKNavigation

一個WKNavigation對象包含跟蹤網(wǎng)頁加載進(jìn)度的信息

WKNavigation對象從webview加載方法返回蚤假,并傳遞給WKNavigationDelegate栏饮,以便從開始到結(jié)束唯一地標(biāo)識網(wǎng)頁加載。 它沒有自己的方法和屬性

附帶一個WKContentMode屬性磷仰,詳見前面文檔

9袍嬉、WKNavigationAction

一個WKNavigationAction對象包含有關(guān)可能導(dǎo)致導(dǎo)航的操作的信息,用于決策。

request:當(dāng)前webview記載的鏈接request
sourceFrame:請求導(dǎo)航的幀
targetFrame:目標(biāo)幀伺通,或者為nil表示新開一個頁面
buttonNumber: 導(dǎo)致請求導(dǎo)航的鼠標(biāo)按鈕的數(shù)量(啥意思箍土?)
modifierFlags: 在請求導(dǎo)航時有效的修飾符鍵
navigationType:(WKNavigationType)觸發(fā)導(dǎo)航的事件類型

WKNavigationType:
WKNavigationTypeLinkActivated: 用戶激活了帶有href屬性的鏈接
WKNavigationTypeFormSubmitted:提交了表單
WKNavigationTypeBackForward:后退或者前進(jìn)
WKNavigationTypeReload:頁面刷新
WKNavigationTypeFormResubmitted:表單重新提交,比如(前進(jìn)后臺刷新)
WKNavigationTypeOther:其他
10罐监、WKNavigationResponse

一個WKNavigationResponse對象包含有關(guān)導(dǎo)航響應(yīng)的信息吴藻,用于決策。

canShowMIMEType:bool值弓柱,指示W(wǎng)ebKit是否可以本機(jī)顯示響應(yīng)的MIME類型
forMainFrame:指示獲取當(dāng)前的網(wǎng)絡(luò)請求是否是為main frame創(chuàng)建的
response:(NSURLResponse)網(wǎng)絡(luò)請求的響應(yīng)
11沟堡、WKBackForwardList、WKBackForwardListItem

一個WKBackForwardList對象維護(hù)一個訪問頁的列表吆你,用于返回并轉(zhuǎn)發(fā)到最近的頁面弦叶。(一般被wkwebview調(diào)用)

注意:
一個WKBackForwardList對象只維持一份列表數(shù)據(jù),并不執(zhí)行實際的頁面加載(換句話說妇多,它不發(fā)出任何的客戶端請求)

backItem:上一個頁面item伤哺,如果沒有為nil
currentItem:當(dāng)前頁面item
forwardItem:下一個頁面item,如果沒有為nil

-itemAtIndex: 返回距離currentItem index距離的item
 index表示所需列表項相對于當(dāng)前項的索引:currentItem為0者祖,backItem為-1立莉,forwardItem為1,以此類推七问。
如果沒有返回nil

backList:先于currentItem的列表
forwardList:接在currentItem之后的列表

WKBackForwardListItem:
URL:相當(dāng)于當(dāng)前webview的URL
initialURL:創(chuàng)建item的URL
title:相當(dāng)于當(dāng)前webview的title
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜓耻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子械巡,更是在濱河造成了極大的恐慌刹淌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讥耗,死亡現(xiàn)場離奇詭異有勾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)古程,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蔼卡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挣磨,你說我怎么就攤上這事雇逞。” “怎么了茁裙?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵塘砸,是天一觀的道長。 經(jīng)常有香客問我晤锥,道長谣蠢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮眉踱,結(jié)果婚禮上挤忙,老公的妹妹穿的比我還像新娘。我一直安慰自己谈喳,他們只是感情好册烈,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婿禽,像睡著了一般赏僧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扭倾,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天淀零,我揣著相機(jī)與錄音,去河邊找鬼膛壹。 笑死驾中,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的模聋。 我是一名探鬼主播肩民,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼链方!你這毒婦竟也來了持痰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤祟蚀,失蹤者是張志新(化名)和其女友劉穎工窍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前酿,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡移剪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了薪者。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡剿涮,死狀恐怖言津,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情取试,我是刑警寧澤悬槽,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瞬浓,受9級特大地震影響初婆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一磅叛、第九天 我趴在偏房一處隱蔽的房頂上張望屑咳。 院中可真熱鬧,春花似錦弊琴、人聲如沸兆龙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紫皇。三九已至,卻和暖如春腋寨,著一層夾襖步出監(jiān)牢的瞬間聪铺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工萄窜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留铃剔,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓脂倦,卻偏偏與公主長得像番宁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赖阻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

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