iOS中WKWebView的一些问题

作者: MeR8 | 来源:发表于2016-10-09 11:06 被阅读526次
    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

    相关文章

      网友评论

      • 沐时:老哥,linkActivated表示的是跨域吗

      本文标题:iOS中WKWebView的一些问题

      本文链接:https://www.haomeiwen.com/subject/pfihyttx.html