雖然webview的體驗(yàn)差,但是在App初期能節(jié)省很多開(kāi)發(fā)成本,靈活地使用也能發(fā)揮各自的優(yōu)勢(shì)。
在交互方面,可以利用webview的代理方法,根據(jù)將要請(qǐng)求的url判斷;也可以利用JS交互。前者相對(duì)簡(jiǎn)單點(diǎn),先說(shuō)第一種,Demo地址https://github.com/QiuYunxiang/WebToNavtive_1
第一種很簡(jiǎn)單,主要是依靠webview的代理方法func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool
做的測(cè)試是百度網(wǎng)址,點(diǎn)擊百度糯米時(shí)阻止web加載而進(jìn)行原生操作:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
print(request.URL)
if (request.URL?.absoluteString == "https://m.nuomi.com/?cid=wise_shouye_nuomi") {
print("原生界面")
return false
}
return true
}
當(dāng)然,在我們的app當(dāng)中這個(gè)url完全不必是url,可以是一些約定好的type字段即可。
第二種利用JS實(shí)現(xiàn)交互還在學(xué)習(xí)中,先推薦一個(gè)寫的比較詳細(xì)的:http://www.lxweimin.com/p/cdaf9bc3d65d
9.9更新
利用JS實(shí)現(xiàn)交互的時(shí)候選擇了最簡(jiǎn)單的一種,直接獲取JS中的方法名,使用block的方式,具體的使用上面鏈接的文章寫的很詳細(xì)了并附有Demo。
需要注意一點(diǎn)的是,在block的回調(diào)里默認(rèn)好像是子線程,如果涉及到UI此時(shí)控制臺(tái)會(huì)打印出一些警告,需要手動(dòng)回到主線程。