偶遇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
- 排坑之旅——動態代理給Spring事務種下的坑Spring
- java的執行緒、建立執行緒的 3 種方式、靜態代理模式、Lambda表示式簡化執行緒Java執行緒模式
- java執行緒實現的三種方式以及靜態代理Java執行緒
- 記一個 Docker 映象無法執行的坑Docker
- 偶遇
- 多執行緒的三種實現方式及靜態代理模式執行緒模式
- python豆瓣多執行緒爬蟲加IP代理(免費的一般是不穩定)Python執行緒爬蟲
- Java建立多執行緒的一種方法Java執行緒
- 爬蟲代理是如何執行的?爬蟲
- iOS WKWebView的javascript alert 不彈的解決方案iOSWebViewJavaScript
- pnpm代理和windows terminal代理的坑NPMWindows
- Spring AOP代理執行解析Spring
- 代理伺服器是如何執行的?伺服器
- 【踩坑指南】執行緒池使用不當的五個坑執行緒
- MyBatis動態代理執行原理MyBatis
- 執行緒池的五種狀態及建立執行緒池的幾種方式執行緒
- 導致代理IP驗證不準確的四種原因
- ssh執行遠端指令碼遇到的坑指令碼
- springboot將jsp打包成jar執行的坑Spring BootJSJAR
- 【框架】一種通知到多執行緒框架框架執行緒
- 執行緒、開啟執行緒的兩種方式、執行緒下的Join方法、守護執行緒執行緒
- VC啟動一個新執行緒的三種方法執行緒
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 建立執行緒的三種方式執行緒
- 執行緒建立的四種方式執行緒
- 8種最坑的SQL錯誤用法,第一個就很坑?SQL
- 遊戲代理坑爹路:千億遊戲市場,一毛也不屬於你遊戲
- 不攔截Request!基於WKWebView的API實現Hybrid容器WebViewAPI
- react和immutable偶遇的那些事React
- JavaScript 中 this 的執行機制及爬坑指南JavaScript
- JavaScript中this的執行機制及爬坑指南JavaScript
- Java併發 之 執行緒池系列 (1) 讓多執行緒不再坑爹的執行緒池Java執行緒
- Linux 下後臺執行和按照守護程式方式後臺執行的坑Linux
- WKWebView的一些問題彙總WebView
- AoE:一種快速整合AI的終端執行環境SDKAI
- java執行原理、靜態代理和動態代理區分Java
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒