偶遇WKWebView不執行代理的一種坑
背景:
1. 通過<圖1>方式建立WKWebView。
2. @interface實現過<WKNavigationDelegate, WKUIDelegate>。
3. @property (nonatomic, strong) WKWebView *webView;
現象: WKWebViewW的代理都不執行,正確的場合、錯誤的場合都沒有任何列印。
// 頁面開始載入時呼叫
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
// 當內容開始返回時呼叫
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
// 頁面載入完成之後呼叫
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
// 頁面載入失敗時呼叫
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;
經過逐個模組註釋的方式找到了原因, 發現在<圖1>程式碼之後有用到WebViewJavascriptBridge,程式碼如下:
這個第三方的主要用途是完成原生APP與JS之間的互動。
如上寫法就是會把之前設定self.webView的代理給清除掉。原因:
<圖2>的程式碼寫在了程式碼【webView.UIDelegate = self; webView.navigationDelegate = self; 】之後。而且建立WebViewJavascriptBridge沒有使用<圖3>。
WebViewJavascriptBridge提供了同時設定代理和回撥的方法如<圖3>:
你只有在這個方法裡設定代理,代理才會真正的生效。但是如果<圖2>的程式碼寫在程式碼【webView.UIDelegate = self; webView.navigationDelegate = self;】之前代理就不會被清除,但是這樣會影響WebViewJavascriptBridge的使用。
我這邊是把<圖2>程式碼更改為上邊這個方法,問題解決。
思考:
1. 在開發iOS APP的時候,我們會使用大量的第三方,在使用第三方的時候,考慮到第三方程式碼對原生程式碼的影響尤其重要。
2. 當我們遇到一些莫名其妙的問題時,一定要保持冷靜,最差也可以用模組註釋的方式排查問題。
相關文章
- WKWebview 的使用及坑WebView
- WKWebView終究要入坑WebView
- java的執行緒、建立執行緒的 3 種方式、靜態代理模式、Lambda表示式簡化執行緒Java執行緒模式
- 排坑之旅——動態代理給Spring事務種下的坑Spring
- java執行緒實現的三種方式以及靜態代理Java執行緒
- 記一個 Docker 映象無法執行的坑Docker
- 多執行緒的三種實現方式及靜態代理模式執行緒模式
- Java建立多執行緒的一種方法Java執行緒
- 爬蟲代理是如何執行的?爬蟲
- python豆瓣多執行緒爬蟲加IP代理(免費的一般是不穩定)Python執行緒爬蟲
- 遊戲代理坑爹路:千億遊戲市場,一毛也不屬於你遊戲
- iOS WKWebView的javascript alert 不彈的解決方案iOSWebViewJavaScript
- crontab不執行
- pnpm代理和windows terminal代理的坑NPMWindows
- 代理伺服器是如何執行的?伺服器
- 導致代理IP驗證不準確的四種原因
- Spring AOP代理執行解析Spring
- MyBatis動態代理執行原理MyBatis
- 【踩坑指南】執行緒池使用不當的五個坑執行緒
- Ubuentu crontab執行scala不執行問題
- Android執行緒篇(一)實現執行緒的幾種方法及區別Android執行緒
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- ssh執行遠端指令碼遇到的坑指令碼
- 【框架】一種通知到多執行緒框架框架執行緒
- 8種最坑的SQL錯誤用法,第一個就很坑?SQL
- react和immutable偶遇的那些事React
- 執行七種武器
- VC啟動一個新執行緒的三種方法執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- Ibatis.Net執行Sql超時commandTimeout的一個坑BATSQL
- 從IE6到IE11上執行WebGL 3D遇到的各種坑IE11Web3D
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- 執行緒的幾種狀態執行緒
- Windows “執行”的七種秘籍(轉)Windows
- java執行原理、靜態代理和動態代理區分Java
- WKWebView 的使用WebView