欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS WKWebView

程序员文章站 2022-08-20 11:16:46
iOS WKWebView参考官方文档的学习使用文章目录iOS WKWebView前言一、WKWebView是什么?二、详细介绍1.使用2.属性、方法详解总结前言提示:从iOS8.0和OS X 10.10开始,需使用WKWebView添加web内容,不要使用UIWebView或者WebView。提示:以下是本篇文章正文内容,下面案例可供参考一、WKWebView是什么?显示交互式Web内容的对象,就像App内的浏览器。Note: 您可以在WKWebView中使用httpBody内容...

iOS WKWebView

参考官方文档的学习使用



前言

提示:从iOS8.0和OS X 10.10开始,需使用WKWebView添加web内容,不要使用UIWebView或者WebView。


提示:以下是本篇文章正文内容,下面案例可供参考

一、WKWebView是什么?

显示交互式Web内容的对象,就像App内的浏览器。
Note: 您可以在WKWebView中使用httpBody内容发出POST请求

二、详细介绍

1.使用

代码如下(示例):

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)
    }
 }
    

默认情况下,Web视图会自动将显示在Web内容中的电话号码转换为“电话”链接。 轻按“电话”链接后,“电话”应用将启动并拨打该号码。若要关闭此默认行为,请使用不包含phoneNumber标志的WKDataDetectorTypes位字段设置dataDetectorTypes属性。

2.属性、方法详解

/* @abstract Checks whether or not WKWebViews handle the given URL scheme by default.
@param scheme The URL scheme to check.
*/
// 返回WebKit本机是否支持使用特定URL方案加载资源。
@available(iOS 11.0, *)
open class func handlesURLScheme(_ urlScheme: String) -> Bool

// 用于初始化Web视图的配置副本。
var configuration: WKWebViewConfiguration

// 返回使用指定frame和配置初始化的Web视图。
init(frame: CGRect, configuration: WKWebViewConfiguration)

// 遵守了NSCoding 用xib构建控件时
public init?(coder: NSCoder)

 ******************* View Information *****************

// 与webView关联的滚动视图
var scrollView: UIScrollView

// 页面title 支持KVO
var title: String?

// 当前URL 支持KVO
var url: URL?

// 自定义用户代理字符串。如果未设置自定义用户代理字符串,则设置为nil。
var customUserAgent: String?

// 当前提交的导航的SecTrustRef对象。 支持KVO
// 用于评估信任的对象
var serverTrust: SecTrust?

// Deprecated 当前提交的导航的证书链的对象数组。
var certificateChain: [Any]


// ******************* Delegates *****************

// WebView的导航代理 
// [详细介绍](https://blog.csdn.net/meiyulong518/article/details/108733416)
var navigationDelegate: WKNavigationDelegate?

// 用户界面代理
var uiDelegate: WKUIDelegate?


 ******************* Loading Content *****************

// 估计当前导航中已加载的部分。 范围为0.0到1.0。
// 导航加载完成后estimatedProgress值保持为1.0直到新的导航开始重新设置为0.0 。
// 支持KVO
var estimatedProgress: Double
//ex. estimatedProgress 监听 
webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        
        if keyPath == "estimatedProgress" {
            print(webView.estimatedProgress)
        }
    }

// 是否已通过安全加密的连接加载页面上的所有资源 支持KVO
var hasOnlySecureContent: Bool

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

// WKNavigation  跟踪网页的加载进度,Web视图的加载方法返回了WKNavigation,并且传递给导航委托方法,以唯一地标识网页
// 从头到尾加载。
@available(iOS 8.0, *)
open class WKNavigation : NSObject {

    
    /** The content mode used when loading this webpage.
     @discussion The value is either WKContentModeMobile or WKContentModeDesktop.
     */
    @available(iOS 13.0, *)
    open var effectiveContentMode: WKWebpagePreferences.ContentMode { get }
}

// 当前是否正在加载内容
var isLoading: Bool

// 重新加载当前页面 返回代表重新加载的网页的新导航。
func reload() -> WKNavigation?
func reload(Any?)//发送此消息的对象

// 重新加载当前页面,并在可能的情况下使用缓存验证条件执行端到端重新验证。
func reloadFromOrigin() -> WKNavigation?
func reloadFromOrigin(Any?)//发送此消息的对象

// 停止加载当前页面上的所有资源。
func stopLoading()
func stopLoading(Any?)//发送此消息的对象

// 设置网页内容和基本URL, 数据,数据的MIME类型,数据的字符编码名称,baseURL用于解析文档中相对URL的URL iOS 9.0+
func load(Data, mimeType: String, characterEncodingName: String, baseURL: URL) -> WKNavigation?

// 加载本地文件。 导航到的文件URL,允许读取访问的URL。
// 如果ReadAccessURL是一个单独的文件则可能只会加载这个文件,
// 如果ReadAccessURL是一个文件夹则会加载这个文件下的文件,iOS 9.0+
func loadFileURL(URL, allowingReadAccessTo: URL) -> WKNavigation?


 ******************* Scaling Content *****************

// 放大手势是否会更改WebView的放大比例。 macOS 10.10+
var allowsMagnification: Bool

// 当前页面内容缩放的比例 macOS 10.10+
var magnification: CGFloat

// 按指定比例缩放页面内容,并将结果居中指定点 macOS 10.10+
func setMagnification(CGFloat, centeredAt: CGPoint)


 ******************* Navigating *****************

// 水平滑动手势是否会触发后退列表导航
var allowsBackForwardNavigationGestures: Bool

// WebView的后退列表
var backForwardList: WKBackForwardList

// 在后退列表中有一个后项可以导航到。
var canGoBack: Bool

// 在后退列表中有一个可以导航到的前进项目。
var canGoForward: Bool

// 是否允许按下链接可显示链接目标的预览。
// 在iOS中,此属性在支持3D Touch的设备上可用。 在iOS 10及更高版本中,默认值为true; 在此之前,默认值为false。
// 如果将此属性的值设置为true,则iOS用户可以按压链接来预览链接和检测到的数据,例如地址和电话号码(WKDataDetectorTypes iOS 10)。 用户将这样的预览称为偷看。 如果用户在链接预览上按得更深,则预览将导航(或pop)到目标。 由于弹出式导航会将用户从您的应用切换到Safari,因此它是iOS应用的可选功能。
// 如果你想支持链接预览,并且也想将用户保留在你的App里,你可以使用SFSafariViewController,如果你将WebView用作应用内浏览器,则最好进行此更改,Safari视图控制器类自动支持链接预览。
// 在macOS中,此属性在具有Force Touch触控板的设备上可用。 在macOS中,默认值为true。
// 将此属性设置为默认值true时,macOS用户可以强制单击链接以显示预览窗口,其中显示了链接的目的地。 如果用户然后单击预览,则目的地将在Safari中打开。
// 在两个平台上,将此属性设置为true时,所有类型的检测到的数据都会对按压做出响应,也就是说,在iOS 9和OS X v10.11中,您无法指定WKWebView类中检测到的数据类型
var allowsLinkPreview: Bool

// SFSafariViewController Test
import SafariServices
let url = URL.init(string: "https://www.baidu.com")
let vc = SFSafariViewController(url: url!)
self.present(vc, animated: true, completion: nil)

// 导航到后退列表中的后一项。如果在后退列表中没有后项,则返回为nil
func goBack() -> WKNavigation?
func goBack(Any?)

// 导航到后退列表中的前一项。 如果在后退列表中没有前项,则返回为nil
func goForward() -> WKNavigation?
func goForward(Any?)

// 从后退列表导航到一个项目,并将其设置为当前项目。
// to:导航到的项目。 该项目必须是网络视图的后退列表中的项目之一。
// 如果它已经是当前项目或不属于Web视图的后退列表,则返回null。
func go(to: WKBackForwardListItem) -> WKNavigation?

// 导航到请求的URL。
func load(URLRequest) -> WKNavigation?









 ******************* Executing JavaScript *****************

// 执行JavaScript字符串,该方法将脚本的结果(或错误)发送到完成处理程序(completionHandler)。 完成处理程序始终在主线程上运行。
func evaluateJavaScript(String, completionHandler: ((Any?, Error?) -> Void)?)

 ******************* Taking Snapshots *****************

// 拍摄可见视图的快照。
func takeSnapshot(with: WKSnapshotConfiguration?, completionHandler: (UIImage?, Error?) -> Void)
webView.takeSnapshot(with: nil) { (image, error) in
   if let img = image {
       UIImageWriteToSavedPhotosAlbum(img, self, nil, nil)
   }
 }



 ******************* Instance Properties 实例属性 *****************

// iOS 14.0+. 媒体类型
var mediaType: String?

// iOS 14.0+ 页面缩放比例
var pageZoom: CGFloat

 ******************* Instance Methods 实例方法 beat  *****************

// iOS 14.0+  Xcode 12.0+ 没有概述
func callAsyncJavaScript(String, arguments: [String : Any], in: WKFrameInfo?, in: WKContentWorld, completionHandler: ((Result<Any, Error>) -> Void)?)

// iOS 14.0+ Xcode 12.0+ 没有概述
func createPDF(configuration: WKPDFConfiguration, completionHandler: (Result<Data, Error>) -> Void)

// iOS 14.0+ Xcode 12.0+ 没有概述
func createWebArchiveData(completionHandler: (Result<Data, Error>) -> Void)

// iOS 14.0+ Xcode 12.0+ 没有概述
func evaluateJavaScript(String, in: WKFrameInfo?, in: WKContentWorld, completionHandler: ((Result<Any, Error>) -> Void)?)

// iOS 14.0+ Xcode 12.0+ 没有概述
func find(String, configuration: WKFindConfiguration, completionHandler: (WKFindResult) -> Void)

// iOS 14.0+ Xcode 12.0+ 没有概述
func printOperation(with: NSPrintInfo) -> NSPrintOperation


// END

总结

以上就是今天要介绍的内容,本文简单介绍了WKWebView的属性方法和使用,接下来我会用三种不同加载的方式来进一步深入的总结学习。

本文地址:https://blog.csdn.net/meiyulong518/article/details/108830681

相关标签: WKWebView ios