iOS中WKWebView的一些問題

  1. WKWebView需要在此代理方法中寫入如下代碼才能實現(xiàn)網(wǎng)頁間的跳轉,否則點擊可能沒有效果(判斷request類型也在此代理中)
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
    {
        // 此代理中實現(xiàn)這個 解決網(wǎng)頁某些點擊不跳轉的問題(跨域跳轉問題)
        if navigationAction.targetFrame == nil
        {
            webView.load(navigationAction.request)
        }
        
        // 判斷 request的類型
        let requestType = navigationAction.navigationType
        switch requestType
        {
            case .backForward: print("backForward")
            case .formResubmitted: print("formResubmitted")
            case .formSubmitted: print("formSubmitted")
            case .linkActivated: print("linkActivated")
            case .reload: print("reload")
            case .other: print("other")
        }
        
        decisionHandler(.allow)
    }
  1. 清除WKWebview的緩存
private func clearWKWebViewCache()
    {
        // iOS9開始提供了清理WKWebView的API
        let version = UIDevice.current.systemVersion
        guard let aVersion = Double(version), aVersion > 9.0 else { return }
        
        let websiteDataTypes = Set([WKWebsiteDataTypeDiskCache,
                                    WKWebsiteDataTypeMemoryCache,
                                    WKWebsiteDataTypeOfflineWebApplicationCache,
                                    WKWebsiteDataTypeCookies,
                                    WKWebsiteDataTypeSessionStorage,
                                    WKWebsiteDataTypeLocalStorage,
                                    WKWebsiteDataTypeWebSQLDatabases,
                                    WKWebsiteDataTypeIndexedDBDatabases])
        
        let date = Date(timeIntervalSince1970: 0)
        WKWebsiteDataStore.default().removeData(ofTypes: websiteDataTypes, modifiedSince: date, completionHandler: {})
    }
  1. WKWebView中也可以用如下的方法調(diào)起safari來打開網(wǎng)頁
UIApplication.shared.open(url)
  1. ATS的問題同樣能影響webView內(nèi)部網(wǎng)頁的跳轉

  2. 網(wǎng)頁實現(xiàn)手勢返回,自帶的就有,只要打開設置

webView.allowsBackForwardNavigationGestures = true
  1. webView和網(wǎng)頁JS的交互我用的是第三方webViewJavascriptBridge,需要網(wǎng)頁端在JS中也要注入部分代碼才能實現(xiàn)互調(diào)(原生的貌似不用,也足夠簡單)

  2. 網(wǎng)頁端現(xiàn)在有一個叫做 單頁面 的技術,iOS中的webView加載此類頁面中的頁面跳轉時,代理方法不走,而且返回和判斷失效

// 一直為 false
webView.canGoBack
// 執(zhí)行無效果
webView.goBack()
  1. 關于cookies的問題。UIWebView走的是全局的httpCookieStrorage,但是WKWebView不是。WKWebView仍然需要先設置全局的cookie然后轉成其JS的格式再注入。

小Demo的鏈接請點擊 WKWebView的Demo

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

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

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