我的Swift开发iOS学习iOS开发笔记

iOS中WKWebView的一些问题

2016-10-09  本文已影响526人  MeR8
  1. WKWebView需要在此代理方法中写入如下代码才能实现网页间的跳转,否则点击可能没有效果(判断request类型也在此代理中)
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
    {
        // 此代理中实现这个 解决网页某些点击不跳转的问题(跨域跳转问题)
        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中也可以用如下的方法调起safari来打开网页
UIApplication.shared.open(url)
  1. ATS的问题同样能影响webView内部网页的跳转

  2. 网页实现手势返回,自带的就有,只要打开设置

webView.allowsBackForwardNavigationGestures = true
  1. webView和网页JS的交互我用的是第三方webViewJavascriptBridge,需要网页端在JS中也要注入部分代码才能实现互调(原生的貌似不用,也足够简单)

  2. 网页端现在有一个叫做 单页面 的技术,iOS中的webView加载此类页面中的页面跳转时,代理方法不走,而且返回和判断失效

// 一直为 false
webView.canGoBack
// 执行无效果
webView.goBack()
  1. 关于cookies的问题。UIWebView走的是全局的httpCookieStrorage,但是WKWebView不是。WKWebView仍然需要先设置全局的cookie然后转成其JS的格式再注入。

小Demo的链接请点击 WKWebView的Demo

上一篇下一篇

猜你喜欢

热点阅读