WKWebView與Js實戰(OC版)


前言

上一篇專門講解了WKWebView相關的所有類、代理的所有API。那么本篇講些什么呢?當然是實戰了!

本篇文章教大家如何使用WKWebView去實現常用的一些API操作。當然,也會有如何與JS交互的實戰。

如果還沒有閱讀過WKWebView精講(OC版),請先閱讀,不然有可能看不懂下面所講的內容。

通過本篇文章,至少可以學習到:

  • OC如何給JS注入對象及JS如何給IOS發送數據
  • JS調用alert、confirm、prompt時,不采用JS原生提示,而是使用iOS原生來實現
  • 如何監聽web內容加載進度、是否加載完成
  • 如何處理去跨域問題

創建配置類

在創建WKWebView之前,需要先創建配置對象,用於做一些配置:

 

配置偏好設置

偏好設置也沒有必須去修改它,都使用默認的就可以了,除非你真的需要修改它:

配置web內容處理池

其實我們沒有必要去創建它,因為它根本沒有屬性和方法:

配置Js與Web內容交互

WKUserContentController是用於給JS注入對象的,注入對象后,JS端就可以使用:

來調用發送數據給iOS端,比如:

AppModel就是我們要注入的名稱,注入以后,就可以在JS端調用了,傳數據統一通過body傳,可以是多種類型,只支持NSNumber, NSString, NSDate, NSArray,NSDictionary, and NSNull類型。

下面我們配置給JS的main frame注入AppModel名稱,對於JS端可就是對象了:

當JS通過AppModel發送數據到iOS端時,會在代理中收到:

所有JS調用iOS的部分,都只可以在此處使用哦。當然我們也可以注入多個名稱(JS對象),用於區分功能。

創建WKWebView

通過唯一的默認構造器來創建對象:

加載H5頁面

配置代理

如果需要處理web導航條上的代理處理,比如鏈接是否可以跳轉或者如何跳轉,需要設置代理;而如果需要與在JS調用alert、confirm、prompt函數時,通過JS原生來處理,而不是調用JS的alert、confirm、prompt函數,那么需要設置UIDelegate,在得到響應后可以將結果反饋到JS端:

添加對WKWebView屬性的監聽

WKWebView有好多個支持KVO的屬性,這里只是監聽loading、title、estimatedProgress屬性,分別用於判斷是否正在加載、獲取頁面標題、當前頁面載入進度:

然后我們就可以實現KVO處理方法,在loading完成時,可以注入一些JS到web中。這里只是簡單地執行一段web中的JS函數:

WKUIDelegate

與JS原生的alert、confirm、prompt交互,將彈出來的實際上是我們原生的窗口,而不是JS的。在得到數據后,由原生傳回到JS:

WKNavigationDelegate

如果需要處理web導航操作,比如鏈接跳轉、接收響應、在導航開始、成功、失敗等時要做些處理,就可以通過實現相關的代理方法:

JS端代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM