偶遇WKWebView不執(zhí)行代理的一種坑

背景

1. 通過(guò)<圖1>方式創(chuàng)建WKWebView。

2. @interface實(shí)現(xiàn)過(guò)<WKNavigationDelegate, WKUIDelegate>。

3. @property (nonatomic, strong) WKWebView *webView;

<圖1>

現(xiàn)象: WKWebViewW的代理都不執(zhí)行,正確的場(chǎng)合、錯(cuò)誤的場(chǎng)合都沒(méi)有任何打印。

// 頁(yè)面開(kāi)始加載時(shí)調(diào)用

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;

// 當(dāng)內(nèi)容開(kāi)始返回時(shí)調(diào)用

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;

// 頁(yè)面加載完成之后調(diào)用

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;

// 頁(yè)面加載失敗時(shí)調(diào)用

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;


經(jīng)過(guò)逐個(gè)模塊注釋的方式找到了原因, 發(fā)現(xiàn)在<圖1>代碼之后有用到WebViewJavascriptBridge,代碼如下:

<圖2>

這個(gè)第三方的主要用途是完成原生APP與JS之間的交互。

?如上寫(xiě)法就是會(huì)把之前設(shè)置self.webView的代理給清除掉。原因:

<圖2>的代碼寫(xiě)在了代碼【webView.UIDelegate = self;? webView.navigationDelegate = self; 】之后。而且創(chuàng)建WebViewJavascriptBridge沒(méi)有使用<圖3>。


WebViewJavascriptBridge提供了同時(shí)設(shè)置代理和回調(diào)的方法如<圖3>:

<圖3>

你只有在這個(gè)方法里設(shè)置代理,代理才會(huì)真正的生效。但是如果<圖2>的代碼寫(xiě)在代碼【webView.UIDelegate = self;? ? webView.navigationDelegate = self;】之前代理就不會(huì)被清除,但是這樣會(huì)影響WebViewJavascriptBridge的使用。

我這邊是把<圖2>代碼更改為上邊這個(gè)方法,問(wèn)題解決。

思考

1. 在開(kāi)發(fā)iOS APP的時(shí)候,我們會(huì)使用大量的第三方,在使用第三方的時(shí)候,考慮到第三方代碼對(duì)原生代碼的影響尤其重要。

2. 當(dāng)我們遇到一些莫名其妙的問(wèn)題時(shí),一定要保持冷靜,最差也可以用模塊注釋的方式排查問(wèn)題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、加載網(wǎng)頁(yè) WKWebView *webView = [[WKWebView alloc] initWithFr...
    LearningCoding閱讀 3,268評(píng)論 0 2
  • 雖然WKWebView是在Apple的WWDC 2014隨iOS 8和OS X 10.10出來(lái)的,是為了解決UIW...
    winann閱讀 136,683評(píng)論 195 641
  • 前言 關(guān)于UIWebView的介紹,相信看過(guò)上文的小伙伴們,已經(jīng)大概清楚了吧,如果有問(wèn)題,歡迎提問(wèn)。 本文是本系列...
    CoderLF閱讀 9,353評(píng)論 2 12
  • shell腳本修改指定文件的內(nèi)容 [文本處理] 求助shell腳本修改ini文件問(wèn)題 使用bash來(lái)查看和修改...
    殘劍閱讀 7,068評(píng)論 0 1
  • 姓名:張義躍 245期謙虛1組學(xué)員 公司:本一設(shè)計(jì) 【日精進(jìn)打卡第15天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》0遍共12遍...
    小小蛋兒閱讀 148評(píng)論 0 0

友情鏈接更多精彩內(nèi)容