問題
在項目中接入了WKWebView,在調(diào)試網(wǎng)頁的過程中碰到一個問題:
在點(diǎn)擊a標(biāo)簽的時候,不會觸發(fā)webView的navigationDelegate
代理方法舱呻,如:
webView:decidePolicyForNavigationAction:decisionHandler:
webView:decidePolicyForNavigationResponse:decisionHandler:
等等,
原本我是在網(wǎng)頁加載完成后更新下網(wǎng)頁的返回按鈕的,這下不起作用了份名。
a標(biāo)簽的代碼
(a標(biāo)簽的事件已經(jīng)被攔截,網(wǎng)頁使用的是vue)
<a class="activity-item-wrapper" href="/activity-detail/588425470926a819f7b8d61d"> </a>
曲線救國
雖然代理方法不會響應(yīng)架专,但是經(jīng)過嘗試canGoBack
這個屬性的值還是會隨著頁面的變化而變化的同窘,所以我直接監(jiān)聽這個屬性,也可以達(dá)到我想要的效果
[self.webView.realWebView addObserver:self forKeyPath:@"canGoBack" options:NSKeyValueObservingOptionNew context:nil];
為什么會出現(xiàn)這種問題
經(jīng)過請教我司前端的同學(xué)后部脚,了解到原網(wǎng)頁使用的是H5的History Api想邦,應(yīng)該是在不刷新頁面的情況下切換Url,導(dǎo)致WKWebView沒有Call代理方法委刘,但是canGoBack和canGoForward屬性是可以檢測到的∩ッ唬現(xiàn)在H5的體驗(yàn)越來越好鹰椒,許多SPA應(yīng)用都是采用的這種方法。
大概流程:
- 在A頁面 通過發(fā)AJAX請求 請求頁面中的B數(shù)據(jù)呕童。
- 在頁面A中通過JS裝載相應(yīng)的信息到相應(yīng)的位置來漆际。
- 通過History API在不刷新頁面的情況下在瀏覽器的地址欄中從頁面A的URL地址切換到頁面B的URL地址。