WKWebView详解(二)- WebKit框架认识

WKWebView文章汇总

WKWebView提供了远比UIWebView多的类,可以实现更加丰富的功能,它有自己的框架WebKit,框架内包含了所有相关的类。本文就将所有的类按照Apple文档的划分进行讲解。

后续在实际使用中有新的理解会继续补充

  1. WebKit结构认识
  2. web视图认识
  3. web视图的配置
  4. 数据管理
  5. 导航相关
  6. 下载
  7. 网页内容的处理
  8. 网页搜索
  9. 上下文菜单
  10. 快照配置

1、WebKit结构认识

使用WebKit框架将样式丰富的web内容集成到应用程序的原生内容中。WebKit为web界面提供了完整的浏览体验。

通过WebKit框架可以完成一系列事情:

  1. 使用HTML、CSS和JavaScript显示丰富的web内容;
  2. 处理页面内容的更多的加载过程;
  3. 显示多个MIME类型和复合框架元素;
  4. 在内容页面之间导航;
  5. 管理最近访问页面的前后列表。

也就是说,我们在自定义视图层次结构中呈现一个WKWebView对象并加载网页内容。使用相应的对象来管理cookie、执行脚本、控制导航、生成快照和执行基于文本的搜索。


WKWebView代码结构.png

2、 web视图认识

通过WKWebView类来显示web视图内容,通过WKUIDelegate协议在web页面显示本地用户界面元素

2.1 WKWebView

2.1.1 简单使用过程

1、请使用WKWebViewConfiguration对象以编程方式创建web视图,
2、在你的web视图出现在屏幕上之前,使用URLRequest结构从web服务器加载内容,或者直接从本地文件或HTML字符串加载内容。
3、符合WKNavigationDelegate协议可以实现编程导航

2.1.2 创建web视图

API:

// 通过configuration来创建视图
- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

//通过coder对象来创建视图
- (nullable instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER;

//通过webview获取其配置对象
@property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;

2.1.3 链接是否可以加载

API:

+ (BOOL)handlesURLScheme:(NSString *)urlScheme;

说明:

  • 返回一个布尔值,检查WKWebViews是否默认处理给定的URL方案。

2.1.4 显示本地用户界面

API:

@property (nullable, nonatomic, weak) id <WKUIDelegate> UIDelegate;

说明:

  • web视图用户界面代理,用来集成自定义用户界面元素的对象,如上下文菜单或面板,到web视图交互。

2.1.5 管理网页导航

API:

@property (nullable, nonatomic, weak) id <WKNavigationDelegate> navigationDelegate;

说明:

  • 用来管理web视图的导航行为的对象。
  • 用于接受或拒绝导航更改的方法,以及用于跟踪导航请求的进度的方法。

2.1.6 加载网页

API:

//加载指定URL请求对象引用的web内容,并导航到该内容。
- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;

//加载指定数据对象的内容并导航到该对象。
- (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL

//加载指定HTML字符串的内容并导航到它。
- (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

//从URL请求对象指定的文件中加载web内容,并导航到该内容。
- (WKNavigation *)loadFileRequest:(NSURLRequest *)request allowingReadAccessToURL:(NSURL *)readAccessURL

//从指定的文件加载web内容并导航到它。
- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL 

//从您提供的数据中加载web内容,就像数据是对请求的响应一样。
- (WKNavigation *)loadSimulatedRequest:(NSURLRequest *)request response:(NSURLResponse *)response responseData:(NSData *)data

//从您提供的HTML中加载web内容,就好像HTML是对请求的响应一样。
- (WKNavigation *)loadSimulatedRequest:(NSURLRequest *)request responseHTMLString:(NSString *)string

//一个布尔值,指示视图当前是否正在加载内容。
@property (nonatomic, readonly, getter=isLoading) BOOL loading;

//估计当前导航已经加载了多少部分。
@property (nonatomic, readonly) double estimatedProgress;

2.1.7 管理加载进程

API:

//重新加载当前网页
- (nullable WKNavigation *)reload;

//重新加载当前网页
// @param sender The object that sent this message.
- (IBAction)reload:(nullable id)sender;

//重新加载当前网页,如果可能的话,使用缓存验证条件对内容进行端到端重新验证。
// @result A new navigation representing the reload.
- (nullable WKNavigation *)reloadFromOrigin;

//重新加载当前网页,如果可能的话,使用缓存验证条件对内容进行端到端重新验证。
- (IBAction)reloadFromOrigin:(nullable id)sender;

//停止加载当前页面上的所有资源。
- (void)stopLoading;

//停止加载当前页面上的所有资源。
- (IBAction)stopLoading:(nullable id)sender;

2.1.8 管理网页的下载相关

API:

//开始在请求中的URL处下载资源。
- (void)startDownloadUsingRequest:(NSURLRequest *)request completionHandler:(void(^)(WKDownload *))completionHandler

//恢复失败或取消的下载。
- (void)resumeDownloadFromResumeData:(NSData *)resumeData completionHandler:(void(^)(WKDownload *))completionHandler

2.1.9 查看视图的信息

API:

与web视图关联的滚动视图。
@property (nonatomic, readonly, strong) UIScrollView *scrollView;

//页面标题
// @discussion @link WKWebView @/link is key-value observing (KVO) compliant
 for this property.
@property (nullable, nonatomic, readonly, copy) NSString *title;

//URL
@property (nullable, nonatomic, readonly, copy) NSURL *URL;

//The media type for the contents of the web view.
@property (nonatomic, nullable, copy) NSString *mediaType

//自定义用户代理字符串。
@property (nullable, nonatomic, copy) NSString *customUserAgent

//用于评估当前网页的信任程度的信任管理对象。
@property (nonatomic, readonly, nullable) SecTrustRef serverTrust

//一个布尔值,指示web视图是否通过安全加密的连接加载页面上的所有资源。
@property (nonatomic, readonly) BOOL hasOnlySecureContent;

//系统从网页中第一个有效的元标签获得的主题颜色。
@property (nonatomic, readonly, nullable) UIColor *themeColor 

//web视图在活动页面后面显示的颜色,当用户滚动到页面边界以外时可见。
@property (nonatomic, null_resettable, copy) UIColor *underPageBackgroundColor

2.1.10 缩放内容

API:

//缩放因子,web视图根据其边界缩放内容。
@property (nonatomic) CGFloat pageZoom

//一个布尔值,指示是否放大手势会改变网页视图的放大。
@property (nonatomic) BOOL allowsMagnification;

//页面内容当前缩放的因子。
@property (nonatomic) CGFloat magnification;

//缩放页面内容并将结果居中于指定的点。
- (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;

2.1.11 网页与媒体的互动

API:

//暂停web视图中所有媒体的播放。
- (void)pauseAllMediaPlaybackWithCompletionHandler:(void (^_Nullable)(void))completionHandler

//获取web视图中媒体的播放状态。
- (void)requestMediaPlaybackStateWithCompletionHandler:(void (^)(WKMediaPlaybackState))completionHandler

//改变网页是否暂停播放页面中的所有媒体。
- (void)setAllMediaPlaybackSuspended:(BOOL)suspended completionHandler:(void (^_Nullable)(void))completionHandler

//关闭web视图显示的所有媒体,包括图中图视频和全屏视频。
- (void)closeAllMediaPresentationsWithCompletionHandler:(void (^_Nullable)(void))completionHandler

2.1.12 管理麦克风和摄像头

API:

//枚举属性,指示网页是否正在使用摄像机捕捉图像或视频。
@property (nonatomic, readonly) WKMediaCaptureState cameraCaptureState

//枚举属性,指示网页是否使用麦克风捕捉音频。
@property (nonatomic, readonly) WKMediaCaptureState microphoneCaptureState

//设置网页是否使用相机捕捉图像或视频。
- (void)setCameraCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//设置网页是否使用麦克风捕捉音频。
- (void)setMicrophoneCaptureState:(WKMediaCaptureState)state completionHandler:(void (^_Nullable)(void))completionHandler

//一种枚举,描述媒体设备(如照相机或麦克风)当前是否捕获音频或视频。
typedef NS_ENUM(NSInteger, WKMediaCaptureState) {
    WKMediaCaptureStateNone,
    WKMediaCaptureStateActive,
    WKMediaCaptureStateMuted,
}

2.1.13 搜索当前页面的内容

API:

//在web视图的内容中搜索指定的字符串。
- (void)findString:(NSString *)string withConfiguration:(nullable WKFindConfiguration *)configuration completionHandler:(void (^)(WKFindResult *result))completionHandler

说明:

  • WKFindConfiguration是搜索web视图内容时使用的配置参数。
  • WKFindResult包含搜索web视图内容的结果的对象。

2.1.14 网页之间的导航

API:

//一个布尔值,指示水平滑动手势是否会触发前后页面导航。
//默认为NO
@property (nonatomic) BOOL allowsBackForwardNavigationGestures;

//一个对象,用来管理以前加载的网页列表,web视图使用它来进行向前和向后导航。
@property (nonatomic, readonly, strong) WKBackForwardList *backForwardList;

//后退一个网页
// @result A new navigation to the requested item, or nil if there is no back
 item in the back-forward list.
- (nullable WKNavigation *)goBack;

//后退一个网页
- (IBAction)goBack:(nullable id)sender;

//向前一个网页
- (nullable WKNavigation *)goForward;

//向前一个网页
- (IBAction)goForward:(nullable id)sender;

//导航到历史网页列表中的某一个网页
- (nullable WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;

//一个布尔值,指示前向列表中是否存在有效的后向项。
@property (nonatomic, readonly) BOOL canGoBack;

//一个布尔值,指示前向列表中是否存在有效的前向项。
@property (nonatomic, readonly) BOOL canGoForward;

//一个布尔值,它决定按下链接是否显示链接目的地的预览。
@property (nonatomic) BOOL allowsLinkPreview

//一个对象,用来捕获web视图中当前的交互状态,以便以后可以将该状态恢复到另一个web视图中。//WKWebView的交互状态(前向列表,当前加载的页面,滚动位置,表单数据…
//可以在另一个WKWebView中检索和设置恢复状态。
@property (nonatomic, nullable, copy) id interactionState

2.1.15 执行JavaScript

API:

//执行JavaScript脚本
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler;

//在指定的框架和内容世界中计算指定的JavaScript脚本。
- (void)evaluateJavaScript:(NSString *)javaScriptString inFrame:(nullable WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^ _Nullable)(_Nullable id, NSError * _Nullable error))completionHandler

//将指定的字符串作为异步JavaScript函数执行。
- (void)callAsyncJavaScript:(NSString *)functionBody arguments:(nullable NSDictionary<NSString *, id> *)arguments inFrame:(nullable WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^ _Nullable)(_Nullable_result id, NSError * _Nullable error))completionHandler

2.1.16 获取Web View的内容

API:

//从web视图的内容异步生成一个平台原生图像。
- (void)takeSnapshotWithConfiguration:(nullable WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void (^)(UIImage * _Nullable snapshotImage, NSError * _Nullable error))completionHandler

//从web视图的内容异步生成PDF数据。
- (void)createPDFWithConfiguration:(nullable WKPDFConfiguration *)pdfConfiguration completionHandler:(void (^)(NSData * _Nullable pdfDocumentData, NSError * _Nullable error))completionHandler

//异步创建web视图内容的web存档。
- (void)createWebArchiveDataWithCompletionHandler:(void (^)(NSData *, NSError *))completionHandler

//返回打印web视图内容时使用的打印操作对象。
- (NSPrintOperation *)printOperationWithPrintInfo:(NSPrintInfo *)printInfo

说明:

  • WKSnapshotConfiguration是当从web视图的内容生成图像时使用的配置数据。
  • WKPDFConfiguration是当生成web视图内容的PDF表示时使用的配置数据。

2.2 WKUIDelegate

WKUIDelegate提供了网页呈现本地用户界面元素的方法,Web视图用户界面委托实现该协议来控制新窗口的打开,增加用户单击元素时显示的默认菜单项的行为,并执行其他与用户界面相关的任务。默认的web视图实现假设每个web视图有一个窗口,所以非常规的用户界面可能实现一个用户界面委托。
常见的就是进行弹框处理或者新开辟一个WKWebView。

2.2.1 创建和关闭Web视图

//Creates a new web view.
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

//通知你的应用程序DOM窗口成功关闭。
- (void)webViewDidClose:(WKWebView *)webView

2.2.2 显示UI面板

//显示JavaScript弹框面板。
- webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:

//显示JavaScript的confirm弹框面板。
- webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:

//显示JavaScript的input弹框面板。
webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:

2.2.3 显示上传面板

//显示文件上传面板。
- webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:

//web内容中的文件上传控件的配置细节。
WKOpenPanelParameters

2.2.4 显示上下文菜单

//告诉委托上下文菜单交互开始了。
- webView:contextMenuConfigurationForElement:completionHandler:

//为委托提供动画对象,web视图使用它来显示上下文菜单。
- webView:contextMenuForElement:willCommitWithAnimator:

//告诉委托web视图将要显示指定元素的上下文菜单。
- webView:contextMenuWillPresentForElement:

//告诉委托web视图取消了指定元素的上下文菜单。
- webView:contextMenuDidEndForElement:

说明:

  • UIContextMenuConfiguration包含上下文菜单配置细节的对象。

2.2.5 请求的权限

//确定安全源对象描述的web资源是否可以访问设备的方向和运动。
- webView:requestDeviceOrientationAndMotionPermissionForOrigin:initiatedByFrame:decisionHandler:

//确定安全源对象描述的web资源是否可以访问设备的麦克风音频和摄像机视频。
- webView:requestMediaCapturePermissionForOrigin:initiatedByFrame:type:decisionHandler:

//设备资源访问的可能权限决定的枚举。
typedef NS_ENUM(NSInteger, WKPermissionDecision) {
    WKPermissionDecisionPrompt,
    WKPermissionDecisionGrant,
    WKPermissionDecisionDeny,
}

//列举可捕获音频、视频或两者的媒体设备类型的枚举。
typedef NS_ENUM(NSInteger, WKMediaCaptureType) {
    WKMediaCaptureTypeCamera,
    WKMediaCaptureTypeMicrophone,
    WKMediaCaptureTypeCameraAndMicrophone,
}

3、 web视图的配置

3.1 WKWebViewConfiguration

WKWebViewConfiguration是用来初始化web视图的属性集合。提供了关于如何配置WKWebView对象的信息。
你在你的代码中创建一个WKWebViewConfiguration对象,配置它的属性,并将它传递给你的WKWebView对象的初始化器。
web视图只在创建时包含您的配置设置;以后不能动态更改这些设置

作用:

  • 用于您的web内容的初始cookie
  • 您的web内容使用的任何自定义URL方案的处理程序
  • 设置如何处理媒体内容设置如何处理媒体内容
  • 有关如何在web视图中管理选择的信息
  • 自定义脚本注入到网页
  • 决定如何呈现内容的自定义规则

3.1.1 配置Web View的行为

API:

@property (nonatomic, strong) WKWebsiteDataStore *websiteDataStore

说明:

  • 用于获取和设置站点cookie以及跟踪缓存数据对象的对象。
  • 用作Cookie的设置

API:

@property (nonatomic, strong) WKUserContentController *userContentController;

说明:

  • 该对象协调应用程序的本地代码与网页的脚本和其他内容之间的交互。
  • 用作web与native交互

API:

@property (nonatomic, strong) WKProcessPool *processPool;

说明:

  • web内容的进程池
  • 当一个web视图被初始化时,一个新的web内容进程将从指定的池或已有的进程中创建
  • 这个对象协调web视图用来渲染它的web内容和执行脚本的进程。

API:

@property (nullable, nonatomic, copy) NSString *applicationNameForUserAgent

说明:

  • 出现在用户代理字符串中的应用程序名称。

API:

@property (nonatomic) BOOL limitsNavigationsToAppBoundDomains

说明:

  • 一个布尔值,指示web视图是否限制导航到应用程序域内的页面。

3.1.2 配置Web视图的首选项

API:

@property (nonatomic, strong) WKPreferences *preferences;

说明:

  • 管理web视图的首选项相关设置的对象。

API:

@property (null_resettable, nonatomic, copy) WKWebpagePreferences *defaultWebpagePreferences

说明:

  • 加载和呈现内容时要使用的默认首选项。

3.1.3 为自定义URL方案添加处理程序

API:

- (void)setURLSchemeHandler:(nullable id <WKURLSchemeHandler>)urlSchemeHandler forURLScheme:(NSString *)urlScheme

说明:

  • 注册一个对象以加载与指定URL方案关联的资源。
  • 设置URL模式的处理对象

API:

- (nullable id <WKURLSchemeHandler>)urlSchemeHandlerForURLScheme:(NSString *)urlScheme

说明:

  • 返回指定URL模式当前注册的处理程序对象。

3.1.4 配置呈现行为

API:

@property (nonatomic) BOOL ignoresViewportScaleLimits

说明:

  • 一个布尔值,决定网页视图是否允许缩放网页。
  • 默认为NO

API:

@property (nonatomic) BOOL suppressesIncrementalRendering;

说明:

  • 一个布尔值,指示web视图是否在内容完全加载到内存之前抑制内容呈现。
  • 默认为NO

3.1.5 设置媒体播放首选项

API:

@property (nonatomic) BOOL allowsInlineMediaPlayback;

说明:

  • 一个布尔值,指示HTML5视频是内联播放还是使用本机全屏控制器。

API:

@property (nonatomic) BOOL allowsAirPlayForMediaPlayback

说明:

  • 一个布尔值,指示web视图是否允许通过AirPlay播放媒体。

API:

@property (nonatomic) BOOL allowsPictureInPictureMediaPlayback

说明:

  • 指示是否可以播放HTML5视频
  • 默认为YES

API:

@property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback

说明:

  • 需要用户手势才能开始播放的媒体类型。

API:

typedef NS_OPTIONS(NSUInteger, WKAudiovisualMediaTypes) {
    WKAudiovisualMediaTypeNone = 0,
    WKAudiovisualMediaTypeAudio = 1 << 0,
    WKAudiovisualMediaTypeVideo = 1 << 1,
    WKAudiovisualMediaTypeAll = NSUIntegerMax
}

说明:

  • 需要用户手势才能开始播放的媒体类型。

3.1.6 确定数据类型

API:

@property (nonatomic) WKDataDetectorTypes dataDetectorTypes 

说明:

  • 应用于web视图内容的数据检测器类型。
  • WKDataDetectorTypes是数据检测器类型类

3.1.7 设置选择的粒度

API:

@property (nonatomic) WKSelectionGranularity selectionGranularity;

typedef NS_ENUM(NSInteger, WKSelectionGranularity) {
    WKSelectionGranularityDynamic,
    WKSelectionGranularityCharacter,
}

说明:

  • 用户可以交互地选择web视图内容的粒度级别。
  • 默认值为WKSelectionGranularityDynamic。
  • WKSelectionGranularity枚举用户可以选择和修改web视图内容的粒度。

3.1.8 选择用户界面的方向性

API:

@property (nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy

typedef NS_ENUM(NSInteger, WKUserInterfaceDirectionPolicy) {
    WKUserInterfaceDirectionPolicyContent,
    WKUserInterfaceDirectionPolicySystem,
}

说明:

  • 用户界面元素的方向性。
  • WKUserInterfaceDirectionPolicy枚举在web视图中决定用户界面元素的方向性的策略

3.2 WKWindowFeatures

一个WKWindowFeatures对象包含一个网页从其包含的web视图请求的属性。,用来显示网页请求其窗口的相关属性。
不能直接创建WKWindowFeatures对象。当一个导航操作导致一个新的web视图的显示,WKWebView创建这个对象,并把它传递给它的UI委托对象的webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:方法。委托使用此对象中的信息来配置并返回新的web视图。

检查窗口的位置和尺寸:

一个布尔值,指示是否使包含的窗口可调整大小。
@property (nullable, nonatomic, readonly) NSNumber *allowsResizing;

检查可见性属性:

一个布尔值,指示网页是否请求可见的菜单栏。
@property (nullable, nonatomic, readonly) NSNumber *menuBarVisibility;

一个布尔值,指示网页是否请求可见的状态栏。
@property (nullable, nonatomic, readonly) NSNumber *statusBarVisibility;

一个布尔值,指示网页是否请求可见工具栏。
@property (nullable, nonatomic, readonly) NSNumber *toolbarsVisibility;

3.3 WKProcessPool

WKProcessPool对象表示WebKit用来管理web内容的单个进程。一个不透明的token,用来在一个进程中运行多个web视图。

为了提供更安全稳定的体验,WebKit在独立的进程中渲染web视图的内容,而不是在你的应用程序的进程空间中。

默认情况下,WebKit给每个web视图自己的进程空间,直到它达到实现定义的进程限制。在此之后,具有相同WKProcessPool对象的web视图共享相同的web内容进程。

如果你的应用程序创建了多个web视图,将相同的WKProcessPool对象分配给可能安全地共享一个进程空间的web视图。实例化这个类的一个实例,并将它分配给每个web视图的WKWebViewConfiguration对象的processPool属性。

不提供任何属性和方法

3.4 WKPreferences

使用WKPreferences对象来指定您的网站的首选项,包括最小字体大小、JavaScript行为和处理欺诈网站的行为。它封装了应用于网站的标准行为。

创建这个对象,并将它分配给你用来创建web视图的WKWebViewConfiguration对象的preferences属性。

3.4.1 设置渲染的偏好

API:

@property (nonatomic) CGFloat minimumFontSize;

说明:

  • 最小字体大小,以点为单位。

API:

@property (nonatomic) BOOL tabFocusesLinks

说明:

  • 一个布尔值,指示按下tab键是否将焦点更改为链接和表单控件。

3.4.2 设置Java和JavaScript首选项

API:

javaScriptCanOpenWindowsAutomatically

说明:

  • 一个布尔值,指示JavaScript是否可以在没有用户交互的情况下打开窗口。

3.4.3 设置fraud警告首选项

API:

@property (nonatomic, getter=isFraudulentWebsiteWarningEnabled) BOOL fraudulentWebsiteWarningEnabled

说明:

  • 一个布尔值,指示web视图是否对可疑的欺诈内容(如恶意软件或网络钓鱼)显示警告。

3.5 WKWebpagePreferences

指定加载和呈现页面内容时使用的行为的对象。当你想改变你的web视图的默认呈现行为时,创建一个WKWebpagePreferences对象。
通常,iOS设备呈现web内容是为了移动体验,而Mac设备呈现内容是为了桌面体验。

3.5.1 设置JavaScript首选项

API:

@property (nonatomic) BOOL allowsContentJavaScript

说明:

  • 一个布尔值,指示是否允许运行来自web内容的JavaScript。

3.5.2 设置首选内容模式

API:

@property (nonatomic) WKContentMode preferredContentMode

typedef NS_ENUM(NSInteger, WKContentMode) {
    WKContentModeRecommended,
    WKContentModeMobile,
    WKContentModeDesktop
}

说明:

  • 网页视图在加载和呈现网页时使用的内容模式。
  • WKContentMode指示如何呈现web视图内容的常量

4、 数据管理

4.1 WKWebsiteDataStore

使用WKWebsiteDataStore对象来配置和管理网站数据。用于管理cookie、磁盘和内存缓存以及web视图的其他类型的数据。

作用:

  • 管理网站使用的cookies
  • 了解网站存储的数据类型
  • 删除不需要的网站数据

4.1.1 创建数据存储对象

API:

+ (WKWebsiteDataStore *)defaultDataStore;

说明:

  • 返回默认数据存储
  • 该存储将数据持久地存储到磁盘

API:

+ (WKWebsiteDataStore *)nonPersistentDataStore;

说明:

  • 创建一个新的非持久的数据存储对象,该对象将网站数据存储在内存中,而不是将数据写入磁盘。
  • 实现“隐私浏览”很有用

4.1.2 检查数据存储属性

API:

@property (nonatomic, readonly, getter=isPersistent) BOOL persistent;

说明:

  • 一个布尔值,指示该对象是否将数据存储到磁盘。

4.1.3 检索Cookie Store

API:

@property (nonatomic, readonly) WKHTTPCookieStore *httpCookieStore

说明:

  • 管理网站的HTTP cookie的对象。

4.1.4 检索特定类型的数据

API:

- (void)fetchDataRecordsOfTypes:(NSSet<NSString *> *)dataTypes completionHandler:(void (^)(NSArray<WKWebsiteDataRecord *> *))completionHandler

说明:

  • 从数据存储中获取指定的记录类型。

API:

+ (NSSet<NSString *> *)allWebsiteDataTypes;

说明:

  • 返回所有可用数据类型的集合。

4.1.5 删除特定类型的数据

API:

- (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes forDataRecords:(NSArray<WKWebsiteDataRecord *> *)dataRecords completionHandler:(void (^)(void))completionHandler;

说明:

  • 从一个或多个数据记录中删除指定的网站数据类型。

API:

- (void)removeDataOfTypes:(NSSet<NSString *> *)dataTypes modifiedSince:(NSDate *)date completionHandler:(void (^)(void))completionHandler;

说明:

  • 删除在指定日期之后更改的网站数据。

4.2 WKWebsiteDataRecord

使用WKWebsiteDataRecord对象来发现网站存储的信息类型。一个特定网站持久存储的数据记录。

记录识别网站存储的数据类型,但不识别实际数据。您可以使用这些信息来帮助用户管理网站数据。例如,Safari为用户提供了查看和删除网站数据的方法。每个记录的域名包含网站的域名和后缀。

我们不能直接创建WKWebsiteDataRecord对象。WebKit创建这些记录并将它们存储在web视图的数据存储中。

使用该数据存储的fetchDataRecordsOfTypes:completionHandler:来检索当前记录对象。还可以使用该对象删除不需要的记录。

4.2.1 获取记录信息

API:

@property (nonatomic, readonly, copy) NSString *displayName;

说明:

  • 数据记录的显示名称。

4.2.2 获取数据类型

API:

@property (nonatomic, readonly, copy) NSSet<NSString *> *dataTypes;

说明:

  • 与记录相关联的数据类型。

4.3 WKHTTPCookieStore

管理与特定web视图相关的HTTP cookie的对象。
使用WKHTTPCookieStore为您的网页指定初始cookie,并管理网页内容的cookie。例如,当用户退出时,可以使用此对象删除当前会话的cookie。要检测网页何时改变cookie,请使用addObserver:方法安装一个cookie观察者。

不需要直接创建wkhttpcookestore对象。相反,从web视图的配置对象的WKWebsiteDataStore对象中检索这个对象。

4.3.1 管理cookie

API:

- (void)getAllCookies:(void (^)(NSArray<NSHTTPCookie *> *))completionHandler;

说明:

  • 异步获取所有存储的cookie,并将它们交付给指定的完成处理程序。

API:

- (void)setCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler;

说明:

  • 将一个cookie添加到cookieStore上。

API:

- (void)deleteCookie:(NSHTTPCookie *)cookie completionHandler:(nullable void (^)(void))completionHandler

说明:

  • 删除指定的cookie。

4.3.2 观察Cookie Store的变化

API:

- (void)addObserver:(id<WKHTTPCookieStoreObserver>)observer;

说明:

  • 向cookie存储添加一个观察者

API:

- (void)removeObserver:(id<WKHTTPCookieStoreObserver>)observer;

说明:

  • 从cookie存储中移除一个观察者。
  • WKHTTPCookieStoreObserver提供在监控网页cookies变化的对象中采用的方法

4.4 WKURLSchemeHandler

一个加载资源的协议,加载的URL模式并不能被WebKit 处理,也就是加载自定义的资源。在对象中采用WKURLSchemeHandler协议,为您的web内容处理自定义URL方案。

自定义方案允许你将自定义的资源类型集成到你的web内容中,你也可以为你的应用程序需要的资源定义自定义方案。

在你的应用程序对象中采用这个协议,并使用WKWebViewConfiguration的setURLSchemeHandler:forURLScheme:方法注册它。

当一个web视图遇到一个使用自定义方案的资源时,它会创建一个WKURLSchemeTask对象,并将它传递给你的方案处理程序对象的方法。

使用webView:startURLSchemeTask:方法开始加载资源。

当你的处理器加载这个对象时,web视图可能会调用你处理器的webView:stopURLSchemeTask:方法来通知你这个资源不再需要了。

加载自定义资源:

//请求处理程序开始加载指定资源的数据。
- webView:startURLSchemeTask:

响应一个被取消的资源请求:

//请求处理程序停止加载指定资源的数据。
- webView:stopURLSchemeTask:

4.5 WKURLSchemeTask

WKURLSchemeTask协议定义了WebKit用来请求自定义资源的接口。
不在自己的对象中采用这个接口。相反,WebKit创建了采用这个接口的对象,并将它们交付给定制方案处理程序(采用WKURLSchemeHandler协议的对象)
你可以使用WebKit提供的对象来获取关于请求资源的信息并加载它们。您还可以使用这些对象向WebKit报告您的进度。

说明:

  • 当WebKit需要一个自定义方案时,它会在任务的request属性中放置一个适当的URL请求。
  • 在接收到请求后,确定资源的大小,并使用适当的URL响应对象调用didReceiveResponse:方法。
  • 提供响应反映了web服务器在接收请求时的行为。
  • 加载资源数据的一部分后,调用didReceiveData:方法将其发送到WebKit。
  • 您可以多次调用该方法以增量地交付数据,也可以使用所有数据调用一次。
  • 在您完成交付所有数据之后,调用didFinish方法。如果在加载过程中出现错误,调用didFailWithError:来报告它。

5、 导航相关

5.1 WKNavigationDelegate

WKNavigationDelegate提供用于接受或拒绝导航更改的方法,以及用于跟踪导航请求的进度的方法。用来协调web视图主框架中的变化的对象中实现WKNavigationDelegate协议的方法。当用户试图导航web内容时,web视图与它的导航委托协调来管理任何转换。

作用:

  • 限制内容中特定链接的导航
  • 跟踪请求的进度,并响应错误和身份验证挑战

5.1.1 允许或拒绝导航请求

API:

- webView:decidePolicyForNavigationAction:preferences:decisionHandler:

说明:

  • 请求委托获得根据指定首选项和操作信息导航到新内容的权限。

API:

- webView:decidePolicyForNavigationAction:decisionHandler:

说明:

  • 请求委托授予根据指定操作信息导航到新内容的权限。
  • WKNavigationActionPolicy指示是否允许或取消从操作导航到网页的常量

API:

- webView:decidePolicyForNavigationResponse:decisionHandler:

说明:

  • 请求委托在知道导航请求的响应后导航到新内容的权限。
  • WKNavigationResponsePolicy指示是否允许或取消从响应导航到网页的常量

5.1.2 跟踪请求的加载进度

API:

- webView:didStartProvisionalNavigation:

说明:

  • 告诉委托主体框架的导航已经启动。

API:

- webView:didReceiveServerRedirectForProvisionalNavigation:

说明:

  • 告诉委托web视图收到了一个请求的服务器重定向。

API:

- webView:didCommitNavigation:

说明:

  • 告诉委托web视图已经开始接收主体框架的内容。

API:

- webView:didFinishNavigation:

说明:

  • 告诉委托导航已经完成。

5.1.3 响应认证挑战

API:

- webView:didReceiveAuthenticationChallenge:completionHandler:

说明:

  • 请求委托响应身份验证质询。

API:

- webView:authenticationChallenge:shouldAllowDeprecatedTLS:

说明:

  • 询问委托是否继续使用已弃用的TLS版本的连接。

5.1.4 响应导航错误

API:

- webView:didFailNavigation:withError:

说明:

  • 告诉委托导航期间发生错误。

API:

- webView:didFailProvisionalNavigation:withError:

说明:

  • 告诉委托在早期导航过程中发生了错误。

API:

- webViewWebContentProcessDidTerminate:

说明:

  • 告诉委托web视图的内容过程被终止。

5.1.5 处理下载进度

API:

webView:navigationResponse:didBecomeDownload:

说明:

  • 告诉委托导航响应变成了下载。

API:

- webView:navigationAction:didBecomeDownload:

说明:

  • 告诉委托导航操作变成了下载。

5.2 WKBackForwardList

使用WKBackForwardList对象来检索web视图之前加载的页面。用来管理以前加载的网页列表,web视图使用它来进行向前和向后导航。

通常,不会直接创建WKBackForwardList对象。每个web视图自动创建一个,并使用它来存储所有加载页面的历史记录。
从web视图的backForwardList属性中获取这个对象,并使用它的内容来方便编程导航。

5.2.1 获取最近的项

//当前项之前的项
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *backItem;

//当前项
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *currentItem;

//当前项之后的项
@property (nullable, nonatomic, readonly, strong) WKBackForwardListItem *forwardItem;

5.2.2 获取列表中的特定项

- (nullable WKBackForwardListItem *)itemAtIndex:(NSInteger)index;

说明:

  • 返回与当前项相对偏移量处的项。

5.2.3 获得子列表

//当前项之前的项数组。
@property (nonatomic, readonly, copy) NSArray<WKBackForwardListItem *> *backList;

//当前项之后的项数组。
@property (nonatomic, readonly, copy) NSArray<WKBackForwardListItem *> *forwardList;

5.3 WKBackForwardListItem

使用wkbackforwardlisttitem对象来获取以前访问过的网页的信息。网页视图先前访问过的网页项。
该对象标识页面的标题和URL。它还标识了请求该网页的URL。您不需要直接创建wkbackforwardlisttitem对象。相反,当web视图加载新页面时,WKBackForwardList对象会将它们与其关联的web视图一起创建。

获取特定于页面的信息:

- (instancetype)init NS_UNAVAILABLE;

/*! @abstract The URL of the webpage represented by this item.
 */
@property (readonly, copy) NSURL *URL;

/*! @abstract The title of the webpage represented by this item.
 */
@property (nullable, readonly, copy) NSString *title;

获取请求页面:

//最初请求web视图加载此页面的源URL。
@property (readonly, copy) NSURL *initialURL;

5.4 WKNavigation

WKNavigation对象唯一标识一个网页的加载请求。跟踪网页加载进度的对象。
当你请求web视图加载内容或导航到页面时,web视图会返回一个WKNavigation对象来识别你的请求。
随着加载操作的进行,web视图将该操作的进度报告给它的导航委托的各种方法,并将匹配的WKNavigation对象传递给它们。

获取内容模式:

WebKit用来加载网页的内容模式。
@property (nonatomic, readonly) WKContentMode effectiveContentMode

5.5 WKNavigationAction

使用一个WKNavigationAction对象来决定是否允许在你的应用程序的web视图中导航。包含有关导致导航发生的操作的信息。
你不能直接创建WKNavigationAction对象。相反,web视图创建它们并将它们传递给适当的委托对象。使用委托的方法来分析操作,并决定是否允许产生导航。

5.5.1 获取导航类型

API:

@property (nonatomic, readonly) WKNavigationType navigationType;

说明:

  • 触发导航的操作类型。

API:

typedef NS_ENUM(NSInteger, WKNavigationType) {
    WKNavigationTypeLinkActivated,
    WKNavigationTypeFormSubmitted,
    WKNavigationTypeBackForward,
    WKNavigationTypeReload,
    WKNavigationTypeFormResubmitted,
    WKNavigationTypeOther = -1,
}

说明:

  • 触发导航的操作类型。

5.5.2 检查导航信息

API:

@property (nonatomic, readonly, copy) NSURLRequest *request;

说明:

  • 与导航操作关联的URL请求对象。

API:

@property (nonatomic, readonly, copy) WKFrameInfo *sourceFrame;

说明:

  • 请求导航的框架。

API:

@property (nullable, nonatomic, readonly, copy) WKFrameInfo *targetFrame;

说明:

  • 在其中显示新内容的框架。

5.5.3 检查用户操作

API:

@property (nonatomic, readonly) NSInteger buttonNumber;

说明:

  • 引起导航请求的鼠标按钮的数量。

API:

@property (nonatomic, readonly) NSEventModifierFlags modifierFlags;

说明:

  • 在导航请求时按下的修改键。

5.6 WKNavigationResponse

使用WKNavigationResponse对象来决定是否允许在你的应用程序的web视图中导航。包含对导航请求的响应的对象,用于制定与导航相关的策略决策。
你不能直接创建WKNavigationResponse对象。相反,web视图创建它们并将它们传递给适当的委托对象。使用委托的方法来分析响应,并决定是否允许产生导航。

5.6.1 获取响应详细信息

//frame的响应
@property (nonatomic, readonly, copy) NSURLResponse *response;

5.6.2 获取额外的响应信息

//A Boolean value that indicates whether the response targets the web view’s main frame.
@property (nonatomic, readonly) BOOL canShowMIMEType;

//一个布尔值,指示响应是否针对web视图的主框架。
@property (nonatomic, readonly, getter=isForMainFrame) BOOL forMainFrame;

6、 下载

6.1 WKDownload

表示web资源下载的对象。

6.2 WKDownloadDelegate

您实现的用于跟踪下载进度和处理重定向、身份验证挑战和失败的协议。

6.2.1 跟踪下载进度

API:

- download:decideDestinationUsingResponse:suggestedFilename:completionHandler:

说明:

  • 请求委托提供一个文件目的地,系统应在此写入下载数据。

API:

- downloadDidFinish:

说明:

  • 告诉委托下载完成。

API:

- download:didFailWithError:resumeData:

说明:

  • 告诉委托下载失败,并提供错误信息和可用于重新启动下载的数据。

6.2.2 响应授权挑战

API:

- download:didReceiveAuthenticationChallenge:completionHandler:

说明:

  • 请求委托响应身份验证质询。

API:

WKDownloadRedirectPolicy

说明:

  • 带有指示是否继续重定向的用例的枚举。

6.2.3 对重定向

API:

- download:willPerformHTTPRedirection:newRequest:decisionHandler:

说明:

  • 请求委托响应下载的重定向响应。

API:

WKDownloadRedirectPolicy

说明:

  • 带有指示是否继续重定向的用例的枚举。

7、 网页内容的处理

7.1 WKUserContentController

WKUserContentController对象提供了你的应用程序和运行在web视图中的JavaScript代码之间的桥梁。用于管理JavaScript代码和web视图之间的交互,以及过滤web视图中的内容。

创建并配置一个WKUserContentController对象,作为整个web视图设置的一部分。在创建web视图之前,将该对象分配给你的WKWebViewConfiguration对象的userContentController属性

过程:

  1. 将JavaScript代码注入到web视图中运行的网页中。
  2. 安装自定义JavaScript函数来调用应用的本地代码。
  3. 指定自定义过滤器,以防止网页加载受限制的内容。

7.1.1 添加和删除自定义脚本

API:

- (void)addUserScript:(WKUserScript *)userScript;

说明:

  • 注入指定的脚本到网页的内容。

API:

- (void)removeAllUserScripts;

说明:

  • 从web视图中删除所有用户脚本。

API:

@property (nonatomic, readonly, copy) NSArray<WKUserScript *> *userScripts;

说明:

  • 与用户内容控制器相关联的用户脚本。

7.1.2 添加和删除消息处理程序

API:

- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler name:(NSString *)name;

说明:

  • 添加可以从JavaScript代码调用的消息回调处理程序。

API:

- (void)addScriptMessageHandler:(id <WKScriptMessageHandler>)scriptMessageHandler contentWorld:(WKContentWorld *)world name:(NSString *)name

说明:

  • 安装一个消息处理程序,您可以从JavaScript代码中指定的内容世界中调用它。

API:

- (void)addScriptMessageHandlerWithReply:(id <WKScriptMessageHandlerWithReply>)scriptMessageHandlerWithReply contentWorld:(WKContentWorld *)contentWorld name:(NSString *)name

说明:

  • 安装一个消息处理程序,该处理程序向JavaScript代码返回一个回复。

API:

- (void)removeScriptMessageHandlerForName:(NSString *)name;

说明:

  • 从JavaScript代码中卸载指定名称的自定义消息处理程序。

API:

- (void)removeScriptMessageHandlerForName:(NSString *)name contentWorld:(WKContentWorld *)contentWorld

说明:

  • 从JavaScript代码中指定的内容世界中卸载自定义消息处理程序。

API:

- (void)removeAllScriptMessageHandlersFromContentWorld:(WKContentWorld *)contentWorld

说明:

  • 从JavaScript代码中指定的内容世界中卸载所有定制消息处理程序。

API:

- (void)removeAllScriptMessageHandlers

说明:

  • 卸载与用户内容控制器关联的所有自定义消息处理程序。

API:

WKScriptMessageHandler

说明:

  • 一个从运行在网页中的JavaScript代码中接收消息的接口。

API:

WKScriptMessageHandlerWithReply

说明:

  • 用于响应网页中运行的JavaScript代码的消息的接口。

7.1.3 添加和删除内容规则

API:

- (void)addContentRuleList:(WKContentRuleList *)contentRuleList

说明:

  • 将指定的内容规则列表添加到内容控制器对象。

API:

- (void)removeContentRuleList:(WKContentRuleList *)contentRuleList

说明:

  • 从内容控制器对象中移除指定的规则列表。

API:

- (void)removeAllContentRuleLists

说明:

  • 从内容控制器中移除所有规则列表。

API:

WKContentRuleList

说明:

  • 一个用于web内容的规则列表。

7.2 WKContentRuleListStore

使用WKContentRuleListStore来编译和管理web视图中过滤内容的规则。包含如何在web视图中加载和过滤内容的规则。
规则列表在你的应用程序中扮演着内容拦截器的角色。你可以使用它们来阻止web视图加载特定的内容,无论是基于该内容的原始位置还是其他你指定的标准.

说明:

  • 获取默认的WKContentRuleListStore对象或创建一个自定义的store对象,并使用它来编译或访问可用的规则。
  • 每个store对象将其现有规则持久地存储在文件系统中,并在创建时加载这些规则。
  • 一个store对象不会自动应用它的任何规则到一个特定的web视图。要将规则应用到web视图,需要将其添加到web视图配置对象的WKUserContentController对象中。

7.2.1 创建内容规则列表存储

API:

+ defaultStore

说明:

  • 返回默认的内容规则列表存储区。

API:

+ storeWithURL:

说明:

  • 在指定目录中创建一个新的内容规则列表存储区。

7.2.2 创建和删除内容规则列表

API:

compileContentRuleListForIdentifier:encodedContentRuleList:completionHandler:

说明:

  • 将指定的JSON内容编译成一个新规则列表,并将其添加到当前数据存储区。

API:

- removeContentRuleListForIdentifier:completionHandler:

说明:

  • 从当前数据存储异步移除规则列表。

7.2.3 访问当前规则列表

API:

- getAvailableContentRuleListIdentifiers:

说明:

  • 异步获取存储中所有规则列表的标识符。

API:

- lookUpContentRuleListForIdentifier:completionHandler:

说明:

  • 异步搜索数据存储中的特定规则列表。

7.3 WKContentWorld

使用WKContentWorld对象作为命名空间,将你的应用程序的web环境与你执行的单个网页或脚本的环境分开。
定义JavaScript代码执行范围的对象,用于防止不同脚本之间的冲突。
内容世界有助于防止两个脚本以冲突的方式修改环境变量时发生的问题。在自己的内容世界中执行脚本有效地为它提供了一个单独的环境变量的副本来修改。

说明:

  • WKContentWorld对象是一个命名空间,不会在当前web视图或网页之外持久化数据。
  • 如果你在两个WKWebView对象中使用相同的内容世界,一个web视图的内容世界中的变量不会出现在另一个web视图中。
  • 类似地,当用户或你的应用程序导航到一个新网页时,前一页的变量消失了,即使两个页面共享相同的内容世界。
  • 使用这个类的方法和属性来获取所需的内容世界。
  • WKContentWorld为你的应用程序提供了一个默认的内容世界,并为当前网页提供了一个内容世界。您还可以创建新的内容世界。例如,您可以为您管理的每个JavaScript扩展创建一个自定义内容世界。在配置或执行与内容相关联的脚本时指定内容世界对象。

作用场景:

  1. 你有复杂的脚本逻辑来连接你的web内容到你的应用程序,但是你的web内容有自己复杂的脚本库。在这种情况下,为特定于应用程序的脚本使用一个内容世界,为特定于内容的脚本使用一个单独的内容世界。
  2. 您实现了一个支持JavaScript扩展的web浏览器。在这种情况下,为每个扩展创建一个独特的内容世界,以防止扩展之间的冲突。

7.3.1 获取默认内容世界

客户端的默认世界。
defaultClientWorld

7.3.2 获取当前页面的名称空间

当前网页内容的内容世界。
pageWorld

7.3.3 检索自定义内容世界

返回具有指定名称的自定义内容世界。
+ worldWithName:

自定义内容世界的名称。
name

7.4 WKFrameInfo

包含网页上某一框架信息的对象。该类的一个实例是一个临时的、仅包含数据的对象。它不能跨多个委托方法调用惟一地标识一个框架。

检查框架的信息:

一个布尔值,指示该框架是网站的主框架还是子框架。
mainFrame

框架的当前请求。
request

框架的安全源。
securityOrigin

7.5 WKSecurityOrigin

WKSecurityOrigin对象是一个临时的、仅包含数据的对象,它标识与特定资源相关联的主机名、协议和端口号。
你不能直接创建WKSecurityOrigin对象。相反,WebKit为它加载的资源创建了它们。第一方加载是指与请求网站具有相同安全源的任何加载URL。第一方的网页可以访问彼此的资源,如脚本和数据库。

因为WKSecurityOrigin对象是瞬态的,所以它不能在多个委托方法调用之间唯一地标识安全源。

获取主机信息:

host

port

获取主机协议:

protocol

7.6 WKUserScript

webView注入网页的脚本。当你想将自定义脚本代码注入到你的web视图页面时,创建一个WKUserScript对象。
使用此对象指定要注入的JavaScript代码,以及与何时以及如何注入该代码相关的参数。在你创建web视图之前,把这个对象添加到与你的web视图配置相关的WKUserContentController对象中。

7.6.1 创建用户脚本对象

API:

- (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly;

说明:

  • 创建包含指定源代码和属性的用户脚本对象。

API:

- (instancetype)initWithSource:(NSString *)source injectionTime:(WKUserScriptInjectionTime)injectionTime forMainFrameOnly:(BOOL)forMainFrameOnly inContentWorld:(WKContentWorld *)contentWorld

说明:

  • 创建一个用户脚本对象,该对象的范围是特定的内容世界。

7.6.2 检查脚本的信息

//脚本的源代码。
@property (nonatomic, readonly, copy) NSString *source;

//将脚本注入网页的时间。
@property (nonatomic, readonly) WKUserScriptInjectionTime injectionTime;

//将脚本内容注入网页的时间常数。
typedef NS_ENUM(NSInteger, WKUserScriptInjectionTime) {
    WKUserScriptInjectionTimeAtDocumentStart,
    WKUserScriptInjectionTimeAtDocumentEnd
}

//一个布尔值,指示是将脚本注入到主框架还是所有框架。
@property (nonatomic, readonly, getter=isForMainFrameOnly) BOOL forMainFrameOnly;

8、 网页搜索

8.1 WKFindConfiguration

是搜索web视图内容时使用的配置参数。
创建一个WKFindConfiguration对象,并配置它的属性来指定如何在web视图的内容中执行搜索。要启动搜索,调用WKWebView的适当方法,并将该对象与搜索字符串一起传递。

配置搜索参数:

//一个布尔值,指示相对于当前选择的搜索方向。默认为NO
@property (nonatomic) BOOL backwards;

//一个布尔值,指示在匹配搜索字符串时是否考虑大小写。默认为NO
@property (nonatomic) BOOL caseSensitive;

//一个布尔值,指示搜索是否绕到页面的另一侧。默认为YES
@property (nonatomic) BOOL wraps;

8.2 WKFindResult

包含搜索web视图内容的结果的对象。
当你使用WKWebView的方法执行搜索时,web view会创建一个WKFindResult对象,并将其交付给你的完成处理程序。您不需要直接创建该类的实例。使用web视图提供的对象来确定它是否找到了匹配的内容。

获取搜索结果:

//一个布尔值,指示web视图在搜索过程中是否找到匹配。
@property (nonatomic, readonly) BOOL matchFound;

9、 上下文菜单

9.1 WKContextMenuElementInfo

WKContextMenuElementInfo对象包含web视图内容中链接的URL。包含有关用户在网页中单击的链接的信息的对象,您可以使用该对象为该链接配置上下文菜单。

您不需要直接创建该类的实例。相反,当用户与链接交互时,web视图会创建它们,并将它们传递给与之关联的WKUIDelegate对象的方法。在委托方法实现中,使用此对象中的URL来确定如何配置上下文菜单。

获取元素信息:

//用户单击的链接的URL。
@property (nonatomic, readonly, nullable) NSURL *linkURL;

10、 快照配置

10.1 WKSnapshotConfiguration

当从web视图的内容生成图像时使用的配置数据。
当你想要根据web视图的内容生成图像时,创建一个WKSnapshotConfiguration对象。使用此对象指定web视图中要捕获的部分和捕获行为。

要生成快照,请将配置对象传递给WKWebView的takeSnapshotWithConfiguration:completionHandler:方法,该方法返回一个平台原生映像供您使用。

指定快照尺寸:

//你的web视图要捕获的部分,指定为视图坐标系统中的一个矩形。
@property (nonatomic) CGRect rect;

//The width of the captured image, in points.
@property (nullable, nonatomic, copy) NSNumber *snapshotWidth;

配置捕获行为:

//A Boolean value that indicates whether to take the snapshot after incorporating any pending screen updates.
//默认为YES
@property (nonatomic) BOOL afterScreenUpdates

10.2 WKPDFConfiguration

当生成web视图内容的PDF表示时使用的配置数据。
当你想要生成一个PDF版本的web视图内容时,创建一个WKPDFConfiguration对象。
使用此对象指定web视图中要捕获的部分。要生成PDF内容,将配置对象传递给WKWebView的createPDF(configuration:completionHandler:)方法,该方法返回PDF数据供您使用。

指定快照尺寸:

//你的web视图要捕获的部分,指定为视图坐标系统中的一个矩形。
@property (nonatomic) CGRect rect
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容