摘要
看了不少別人寫的博客或者論壇磺送,關于iOS與HTML5交互方法大概主要有5種方式:
利用WKWebView進行交互(系統(tǒng)API)
利用UIWebView進行交互(系統(tǒng)API)
蘋果的javascriptcore.framework框架;?
跨平臺cordova框架;
oc第三方WebViewJavascriptBridge
今天主要介紹前兩種摄悯,后三種大家有興趣的自己查看資料泥畅。
在這里我還是要推薦下我自己建的iOS開發(fā)學習群:680565220役耕,群里都是學ios開發(fā)的枫笛,如果你正在學習ios ,小編歡迎你加入往枣,今天分享的這個案例已經上傳到群文件进胯,大家都是軟件開發(fā)黨用爪,不定期分享干貨(只有iOS軟件開發(fā)相關的),包括我自己整理的一份2018最新的iOS進階資料和高級開發(fā)教程
下面我們來介紹第一種方式:
01
利用WKWebView進行交互
通過本篇文章胁镐,至少可以學習到:
1. OC如何給JS注入對象及JS如何給iOS發(fā)送數據
2. JS調用alert偎血、confirm、prompt時盯漂,不采用JS原生提示颇玷,而是使用iOS原生來實現
3. 如何監(jiān)聽web內容加載進度、是否加載完成
4. 如何通過js來跳轉到iOS指定的頁面上
如何處理去跨域問題
創(chuàng)建配置類
在創(chuàng)建WKWebView之前就缆,需要先創(chuàng)建配置對象帖渠,用于做一些配置:?
配置偏好設置
偏好設置也沒有必須去修改它,都使用默認的就可以了违崇,除非你真的需要修改它:?
配置web內容處理池
其實我們沒有必要去創(chuàng)建它阿弃,因為它根本沒有屬性和方法:
web內容處理池,由于沒有屬性可以設置羞延,也沒有方法可以調用渣淳,不用手動創(chuàng)建。
配置Js與Web內容交互
WKUserContentController是用于給JS注入對象的伴箩,注入對象后入愧,JS端就可以使用:
window.webkit.messageHandlers..postMessage()
來調用發(fā)送數據給iOS端,比如:?
AppModel就是我們要注入的名稱嗤谚,注入以后棺蛛,就可以在JS端調用了,傳數據統(tǒng)一通過body傳巩步,可以是多種類型旁赊,只支持NSNumber, NSString, NSDate, NSArray,NSDictionary, and NSNull類型。?
下面我們配置給JS的main frame注入AppModel名稱椅野,對于JS端可就是對象了:?
當JS通過AppModel發(fā)送數據到iOS端時终畅,會在代理中收到:?
所有JS調用iOS的部分,都只可以在此處使用哦竟闪。當然我們也可以注入多個名稱(JS對象)离福,用于區(qū)分功能。
創(chuàng)建WKWebView
加載H5頁面
配置代理
如果需要處理web導航條上的代理處理炼蛤,比如鏈接是否可以跳轉或者如何跳轉妖爷,需要設置代理;而如果需要與在JS調用alert理朋、confirm絮识、prompt函數時,通過JS原生來處理嗽上,而不是調用JS的alert笋除、confirm、prompt函數炸裆,那么需要設置UIDelegate垃它,在得到響應后可以將結果反饋到JS端:?
添加對WKWebView屬性的監(jiān)聽
然后我們就可以實現KVO處理方法,在loading完成時烹看,可以注入一些JS到web中国拇。這里只是簡單地執(zhí)行一段web中的JS函數:?
WKUIDelegate
與JS原生的alert、confirm惯殊、prompt交互酱吝,將彈出來的實際上是我們原生的窗口,而不是JS的土思。在得到數據后务热,由原生傳回到JS:?
WKNavigationDelegate
如果需要處理web導航操作忆嗜,比如鏈接跳轉、接收響應崎岂、在導航開始捆毫、成功、失敗等時要做些處理冲甘,就可以通過實現相關的代理方法:?
JS端代碼
02
利用UIWebView進行交互
大家都知道UIWebView是最常見的SDK,平時項目中我們用的也比較多,它有一個stringByEvaluatingJavaScriptFromString方法可以將JavaScript嵌入頁面中绩卤,通過這個方法我們可以在iOS中與UIWebView中的網頁元素交互.下面就來詳細介紹一下它的具體操作步驟.首先我們來加載一個網頁,看看他的源碼:
創(chuàng)建UIWebView
加載URL
效果圖?
獲取當前頁面的URL
獲取頁面的title
修改HTML元素標簽的值
插入js代碼
提交表單