ios swift WKWebView (一)基本了解

苹果官方文档对WKWebView的解读,在iOS 8和OS X 10.10开始,使用WKWebView向应用程序添加Web内容。不要使用UIWebView或WebView。但是如果应用程序需要兼容更低版本,则建议还是使用UIWebView或WebView。

一个WKWebView对象显示交互式Web内容,例如一个应用程序的浏览器。你可以使用WKWebView类嵌入Web内容的应用程序。这样做,创造一个WKWebView对象,设置它为视角,并发送一个请求来加载网页内容。

代码实例,苹果官方文档:(苹果官方文档使用最新的swift版本swift3)

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
    
    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }}

一下示例代码使用xcode7.3 swift2.2版本:

//
//  WKViewController.swift
//  WebviewTest
//
//  Created by Zzcz on 2017/3/13.
//  Copyright © 2017年 fly. All rights reserved.
//

import UIKit
import WebKit
class WKViewController: UIViewController,WKUIDelegate ,WKNavigationDelegate{

    var webView : WKWebView!
    var urlString = "https://www.apple.com"
    
    override func loadView() {
        let webConfiguratiojn = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguratiojn)
        webView.UIDelegate = self
        webView.navigationDelegate = self
        view = webView
        
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        let myURL = NSURL.init(string: urlString)
        let myRequest = NSURLRequest.init(URL: myURL!)
        webView.loadRequest(myRequest)
        
        
        // Do any additional setup after loading the view.
    }

}
对比UIWebView,WKWebView似乎更为强大,WKWebView允许用户通过网页历史前进后退、前进,用goback()和goforward()方法动作按钮。使用cangoback和cangoforward属性禁用的按钮时,用户不能在一个方向移动。

默认情况下,Web视图自动将Web内容中出现的电话号码转换为电话链接。当电话联系被窃听,手机APP的推出和拨号。关闭此默认行为,用WKDataDetectorTypes bitfield,不包含电话号码的旗帜datadetectortypes属性设置。
也可以使用setmagnification(_:centeredat:)以编程方式设置网页内容的第一次是一个Web视图显示比例。此后,用户可以改变规模使用手势。

WKWebView的常用属性或是WKWebView的视图信息

var scrollView: UIScrollView
The scroll view associated with the web view.//与Web视图关联的滚动视图。
var title: String?
The page title.//页面标题。
var url: URL?
The active URL.//活动网址。也可理解为网址链接
var customUserAgent: String?
The custom user agent string.//自定义用户代理字符串。
var serverTrust: SecTrust?
A SecTrustRef object for the currently committed navigation.//目前致力于导航的sectrustref对象。
var certificateChain: [Any]
An array of objects forming the certificate chain for the currently committed navigation.//为当前提交的导航形成证书链的对象数组。
WKWebView的代理:

        webView.UIDelegate = self//WKUIDelegate
        webView.navigationDelegate = self//WKNavigationDelegate
加载内容:

var estimatedProgress: Double//已加载当前导航的几分之一的估计值。

var hasOnlySecureContent: Bool// 一个布尔值,指示页面上的所有资源是否已通过安全加密连接加载。 


func loadHTMLString(String, baseURL: URL?)// 设置网页内容和基本网址。 


var isLoading: Bool// 一个布尔值,该值指示视图(WKWebView)是否正在加载内容。 


func reload()// 重新载入当前页面。 可以理解为刷新数据


func reloadFromOrigin()// 重新载入当前页面,进行端到端的验证使用缓存验证条件,如果可能的话。 


func stopLoading()// 停止加载当前页上的所有资源。 


func load(Data, mimeType: String, characterEncodingName: String, baseURL: URL)// 设置网页内容和基本网址。 


func loadFileURL(URL, allowingReadAccessTo: URL)// 导航到所请求的文件系统上的文件的URL 

缩放内容:(WKWebView的属性)

var allowsMagnification: Bool// 一个布尔值,指示是否放大手势会改变web视图的放大倍数。 


var magnification: CGFloat// 当前缩放页面内容的因素。 


func setMagnification(CGFloat, centeredAt: CGPoint)// 按指定的因子缩放页面内容,并将结果集中在指定的点上。理解为在某一点缩放内容 

导航:

var allowsBackForwardNavigationGestures: Bool// 一个布尔值,指示是否将触发水平滑动手势前进后退列表导航。 

var backForwardList: WKBackForwardList// Web视图的前向列表。 

var canGoBack: Bool// 一个布尔值,指示是否可以导航到前进后退列表有一回项目。 

var canGoForward: Bool// 一个布尔值,指示是否可以导航到后面转发列表有一个项目。 

var allowsLinkPreview: Bool// 一个布尔值,该值决定是否按下链接显示链接的目的地预览。 

func goBack()// 导航到后面的项目在后面转发列表。 

func goForward()// 导航到了项目中的反馈表。 

func go(to: WKBackForwardListItem)// 导航到一个项目从后向前列表并设置为当前项目。 

func load(URLRequest)// 导航到一个URL。加载网络地址

 执行JavaScript
func evaluateJavaScript(String, completionHandler: ((Any?, Error?) -> Void)? = nil)// 评估或是获得一个JavaScript字符串。 
实例方法:

func goBack(Any?)//导航到后面的项目在后面转发列表。

func goForward(Any?)//导航到了项目中的反馈表。

func reload(Any?)//重新载入当前页面。

func reloadFromOrigin(Any?)//重新载入当前页面,进行端到端的验证使用缓存验证条件,如果可能的话。

func stopLoading(Any?)//停止加载当前页上的所有资源。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS WKWebView 中携带 cookie 可以通过设置 WKWebView 的 configuration 来实现。以下是一些携带 cookie 的步骤: 1. 获取 cookie 首先,您需要获取到您要携带的 cookie。您可以使用 NSHTTPCookieStorage 的 cookiesForURL 方法来获取特定 URL 的 cookie,或者使用 NSHTTPCookieStorage 的 cookies 方法获取所有 cookie。 例如: ```swift let cookies = HTTPCookieStorage.shared.cookies ?? [] ``` 2. 创建 WKWebViewConfiguration 接下来,您需要创建 WKWebViewConfiguration,并设置它的 processPool 和 websiteDataStore。 例如: ```swift let configuration = WKWebViewConfiguration() configuration.processPool = WKProcessPool() configuration.websiteDataStore = WKWebsiteDataStore.default() ``` 3. 设置 WKWebViewConfiguration 的 processPool 由于 WKWebView 是多进程的,所以需要为每个 WKWebView 创建一个独立的进程池。您可以通过设置 WKWebViewConfiguration 的 processPool 属性来实现。 例如: ```swift let configuration = WKWebViewConfiguration() configuration.processPool = WKProcessPool() ``` 4. 设置 WKWebViewConfiguration 的 websiteDataStore WKWebViewConfiguration 还有一个属性叫做 websiteDataStore,它是用来存储 WKWebView 的数据的。您可以通过设置 websiteDataStore 属性来实现携带 cookie。 例如: ```swift let configuration = WKWebViewConfiguration() configuration.websiteDataStore = WKWebsiteDataStore.default() ``` 5. 将 cookie 添加到 WKWebViewConfiguration 的 websiteDataStore 中 最后,您需要将 cookie 添加到 WKWebViewConfiguration 的 websiteDataStore 中。您可以使用 HTTPCookieStore 的 setCookie 方法来实现。 例如: ```swift let cookieStore = configuration.websiteDataStore.httpCookieStore for cookie in cookies { cookieStore.setCookie(cookie, completionHandler: nil) } ``` 完成以上步骤后,您就可以使用带有 cookie 的 WKWebView 实例来加载网页了。 例如: ```swift let webView = WKWebView(frame: .zero, configuration: configuration) webView.load(URLRequest(url: url)) ``` 带有 cookie 的 WKWebView 将在每个请求中自动携带 cookie。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值