一个
对象可以显示交互式的 web 内容. 就像一个应用程序的浏览器. 你可以使用
- WKWebView
类嵌入 Web 内容的应用程序. 这样做, 创造一个
- WKWebView
对象, 设置为它的 view. 并发送一个请求来加载网页的内容
- WKWebView
在 iOS 8.0 和 OS X 10.10 之后, 使用
来加载网页内容到你的 App, 不要再使用
- WKWebView
或
- UIWebView
- WebView
下面的方法是一个初始化方法, 可以通过
来自定义配置. 只能在初始化的时候进行配置, 初始化之后修改 configuration 对 web 视图没有影响. 你也可以使用
- WKWebViewConfiguration
方法, 这个方法使用的是默认的配置.
- initWithframe:
- // 参数1 : frame: 新webView 的frame
- // 参数2: configuration : 新webView 的配置
- - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration;
[1]
- 加载本地 HTML 文件
- // string : 作为网页内容使用的字符串
- // baseURL : 解析文档中相对URL的URL
- - (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
[2] 加载 web 内容
- // request : 指定导航到的URL的请求
- - (WKNavigation *)loadRequest:(NSURLRequest *)request;
- - (void)stopLoading;
如果正在加载内容, 则设置为 ture. 否则 false.WKWebView 可以通过 KVO 来监听此属性的变化.
- @property (nonatomic, readonly, getter=isLoading) BOOL loading;
- - (WKNavigation *)goBack;
- - (WKNavigation *)goForward;
- @property (nonatomic, readonly) BOOL canGoBack;
- @property (nonatomic, readonly) BOOL canGoForward;
因为在默认的情况下, 一个 webView 中会自动将出现在 web 内容种电话号码转换为电话链接. 当一个电话链接被点击时, 手机 App 开始拨号. 那么为了关掉这一行为, 需要设置 WKDataDetectorTypes 属性.
- @property (nonatiomic) WKDataDetectorTypes dataDetectorTypes;
- // 检测到的东西都转为对应的链接了
- typedef enum WKDataDetectorTypes: NSUInteger {
- WKDataDetectorTypeNone = 0,
- WKDataDetectorTypePhoneNumber = 1 << 0,
- WKDataDetectorTypeLink = 1 << 1,
- WKDataDetectorTypeAddress = 1 << 2,
- WKDataDetectorTypeCalendarEvent = 1 << 3,
- WKDataDetectorTypeTrackingNumber = 1 << 4,
- WKDataDetectorTypeFlightNumber = 1 << 5,
- WKDataDetectorTypeLookupSuggestion = 1 << 6,
- WKDataDetectorTypeAll = NSUIntegerMax,
- WKDataDetectorTypeSpotlightSuggestion = WKDataDetectorTypeLookupSuggestion
- }
- WKDataDetectorTypes;
- // magnification : 缩放内容的因素
- - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;
- @property(nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
- - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration;
- - (instancetype)initWithCoder:(NSCoder *)coder;
1. 与 webView 关联的 scrollView
- @property(nonatomic, readonly, strong) UIScrollView *scrollView;
2. 页面标题
WKWebView 可以通过 KVO 来观察此属性
- @property (nonatomic, readonly, copy) NSString *title;
3. 活动网址
符合 KVO
- @property(nonatomic, readonly, copy) NSURL *URL;
4. 自定义用户代理字符串
- @property(nonatomic, copy) NSString *customUserAgent;
5. 当前提交导航的一个 SecTrustRef 对象
- @property(nonatomic, readonly) SecTrustRef serverTrust;
1.webView 的导航代理
- @property(nonatomic, weak) id<WKNavigationDelegate> navigationDelegate;
2.webview 的用户交互代理
- @property(nonatomic, weak) id<WKUIDelegate> UIDelegate;
1. 估计当前导航加载的进度
- @property(nonatomic, readonly) double estimatedProgress;
2. 布尔值, 页面上的所有资源是否已通过安全加密连接加载
- @property(nonatomic, readonly) BOOL hasOnlySecureContent;
- - (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
4. 布尔值, 表示视图当前是否正在加载内容
- @property(nonatomic, readonly, getter=isLoading) BOOL loading;
5. 刷新当前页面
- - (WKNavigation *)reload;
6. 如果可能的话, 通过使用缓存验证条件, 端到端的验证来重新载入当前页面
- - (WKNavigation *)reloadFromOrigin.
7. 停止加载
- - (void)stopLoading;
- // 1.data : 网页内容使用的数据
- // 2.MIMEType : 数据的MIME类型
- - (WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL;
9. 导航到所请求的文件系统上的文件的 URL
- - (WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL;
1. 是否通过放大手势来改变 webview 的放大倍率
- @property(nonatomic) BOOL allowsMagnification;
2. 当前页面内容的缩放因子. 默认 1.0
- @property (nonatomic) CGFloat magnification;
3. 用指定的因子对页面内容进行缩放. 并将结果集中在指定的点上
- - (void)setMagnification:(CGFloat)magnification centeredAtPoint:(CGPoint)point;
1. 布尔值. 是否可以通过水平滑动手势来操作前进或后退的导航
- @property(nonatomic) BOOL allowsBackForwardNavigationGestures;
2.webview 的前向列表
- @property(nonatomic, readonly, strong) WKBackForwardList *backForwardList;
- @property(nonatomic, readonly) BOOL canGoBack;
- @property(nonatomic, readonly) BOOL canGoForward;
- // 决定链接是否可用
- @property(nonatomic) BOOL allowsLinkPreview;
- - (WKNavigation *)goBack;
- - (WKNavigation *)goForward;
- // 导航到一个项目从后向前列表并设置为当前项目
- - (WKNavigation *)goToBackForwardListItem:(WKBackForwardListItem *)item;
- // 导航到一个 URL
- - (WKNavigation *)loadRequest:(NSURLRequest *)request;
- - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *error))completionHandler;
- // 1.
- - (IBAction)goBack:(id)sender;
- // 2.
- - (IBAction)goForward:(id)sender;
- // 3.
- - (IBAction)reload:(id)sender;
- // 4.
- - (IBAction)reload:(id)sender;
- // 5.
- - (IBAction)stopLoading:(id)sender;
1. 创建一个新的 webView
- // 1.webView : 调用代理方法的webview
- // 2.configuration : 创建新的webview 时用到的配置
- // 3.navigationAction : 创建新web视图的导航操作
- // 4.windowFeatures : 网页要求的窗口特性
- - (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNanigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;
2. 显示用户 UI 界面
- [1]显示一个 JavaScript警报面板
- // 1.webview : 调用代理方法的webview
- // 2.message : 要显示的message
- // 3.frame : 关于 JavaScript 进程发起此嗲偶偶那个的框架的信息.
- // 4.completionHandler : 警报面板调用完成之后的回调
- - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;
注意:
对与用户安全来讲, 实现这个方法要注意到一个事实, 就是一个特定的网站控制这个警报面板的内容. 识别控制网站的最简单的方法是用
. 这个警报面板应该有一个 OK 按钮.
- frame.request.URL.host
- [2]显示一个 JavaScript 确认面板
- - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;
- [3]显示一个 JavaScript 文本输入面板
- // 1.prompt : 要显示的消息
- // 2.defaultText : 要显示的初始文本
- - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *result))completionHandler;
3. 关闭 web 视图
通知 App 成功关闭 DOM 窗口
- - (void)webViewDidClose:(WKWebView *)webView;
注意:
应用程序要从视图结构中将 web 视图删除. 并且更新 UI. 如关闭包含的浏览器选项卡或窗口
4. 显示上传面板
- // 1.parameters : 描述文件上传控件的参数
- - (void)webView:(WKWebView *)webView runOpenPanelWithParameters:(WKOpenPanelParameters *)parameters initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSArray<NSURL *> *URLs))completionHandler;
注意:
如果没有实现此方法, webView 就会表现出像用户选择取消按钮一样.
5.Responding to Force Touch Actions
[1] 确定是否应该显示给定的元素
- - (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo;
[2] 当用户执行
时调用
- a peek action(一瞥?偷看?)
- - (UIViewController *)webView:(WKWebView *)webView previewingViewControllerForElement:(WKPreviewElementInfo *)elementInfo defaultActions:(NSArray<id<WKPreviewActionItem>> *)previewActions;
[3] 当用户在预览时执行弹出动作时调用
- - (void)webView:(WKWebView *)webView commitPreviewingViewController:(UIViewController *)previewingViewController;
当你在 web 视图的接受过程中, 加载, 完成导航请求时,
协议的方法帮助你实现自定义行为,
- WKNavigationDelegate
当 webView 开始接收 web 内容时调用
- - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
当 web 内容开始在一个 webview 加载时调用
- - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
- - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
2. 当 webView 接收服务器重定向时调用
- - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;
1. 导航期间发生错误时调用
- - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error;
2.webView 加载内容时发生错误时调用
- - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error;
1. 导航完成时调用
- - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
2. 当 webview 的 web 内容进程终止的时候调用
- - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView;
1. 决定是否允许或取消导航
- - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
2. 决定是否在其响应已知后允许导航或取消导航
- - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
- typedef enum WKNavigationActionPolicy: NSInteger {
- WKNavigationActionPolicyCancel,
- WKNavigationActionPolicyAllow
- }
- WKNavigationActionPolicy;
当 web 视图需要响应身份验证挑战时调用
- - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler;
用于初始化 Web 视图的属性集合
使用
这个类, 你可以决定如何尽快的来呈现一个网页. 它有许多属性可以设置, 媒体播放, 用户可选择项的粒度, 和许多其他的选择.
- WKWebViewConfiguration
这个类, 是只有当一个 Web 视图在初始化的时候, 才能被使用. 在我们创建了 Web 视图之后, 不能使用这个类来更改其配置了.
- WKWebViewConfiguration
1.
- applicationNameForUserAgent
在用户代理字符串中使用的应用程序名称
- @property (nonatomic, copy) NSString *applicationNameForUserAgent;
2.
- preferences
web 视图使用的首选项
- @property (nonatomic, copy) WKPreferences *preferences
3.
- processPool
获取视图 web 内容过程的流程池
当 Web 视图初始化时, 要么为指定的池创建一个新的 web 内容流程, 要么使用该池中的现有进程
- @property(nonatomic, strong) WKProcessPool *processPool;
4.
- userContentController
与 web 视图关联的用户内容控制器
- @property(nonatomic, strong) WKUserContentController *userContentController;
5.
- websiteDataStore
web 视图所使用的网站数据存储
如果 Web 视图和一个非持久性数据存储相关联, 没有数据被写入文件系统, 此属性实现 Web 视图中的私有浏览.
- @property(nonatomic, strong) WKUserContentController *userContentController;
1.
- ignoresViewportScaleLimits
一个 布尔值, 确定
对象是否总是允许网页缩放
- wkwebView
将此属性设置为
, 可以使网页进行缩放, 而不管作者的意图如何. 默认是
- TRUE
- FALSE
- @property(nonatomic) BOOL ignoresViewportScaleLimits;
1.
- suppressesIncrementalRendering
一个布尔值, 指示 web 视图是否在完全加载到内存中之前禁止内容呈现
默认是
- NO
- @property(nonatomic) BOOL suppressesIncrementalRendering;
1.
- allowsInlineMediaPlayback
一个布尔值, 指示 HTML5 视频是否在线播放或使用本机全屏控制器
你必须将此属性设置为播放 (inline video) 内联视频. 设置这个属性为
来播放在线视频. 设置这个属性为
- true
来使用原生的全屏控制器来播放视频. 当添加一个 HTML 视频文件到 iPhone 上的时候, 你必须包含
- false
属性.
- playsinline
这个属性对于 iPhone 来说, 默认是
, 对于 iPad 来说, 默认是
- false
.
- true
注意: 在 iOS 10.0 之后必须使用
属性
- webkit-playsinline
- @property (nonatomic) BOOL allowsInlineMediaPlayback;
2.
- allowsAirPlayForMediaPlayback
一个布尔值, 指示 AirPlay 是否可用. 默认
.
- YES
- @property(nonatomic) BOOL allowsAirPlayForMediaPlayback;
3.
- allowsPictureInPictureMediaPlayback
一个布尔值, 指示 HTML5 视频是否支持画中画, 默认
.
- YES
- @property (nonatomic) BOOL allowsPictureInPictureMediaPlayback;
4.
- mediaTypesRequiringUserActionForPlayback
确定哪些视频类型需要用户手势开始播放
- @property (nonatomic) WKAudiovisualMediaTypes mediaTypesRequiringUserActionForPlayback;
5.
[过期方法]
- mediaPlaybackAllowsAirPlay
方法替代.
- allowsAirPlayForMediaPlayback
6.
[过期方法]
- requiresUserActionForMediaPlayback
7.
[过期方法]
- mediaPlaybackRequiresUserAction
替代
- mediaTypesRequiringUserActionForPlayback
8.
- WKAudiovisualMediaTypes
需要通过用户的手势才开始播放的媒体类型
- typedef enum WKAudiovisualMediaTypes: NSUInteger {
- WKAudiovisualMediaTypeNone = 0,
- WKAudiovisualMediaTypeAudio = 1 << 0,
- WKAudiovisualMediaTypeVideo = 1 << 1,
- WKAudiovisualMediaTypeAll = NSUIntegerMax
- }
- WKAudiovisualMediaTypes;
1.
- selectionGranularity
用户可以交互选择 web 视图中的内容的粒度级别. 默认是
- WKSelectionGranularityDynamic
- @property (nonatomic) WKSelectionGranularuty selectionGranularity;
2.
- WKSelectionGranularity
可以以交互的方式创建和修改选择的粒度
- typedef enum WKSelectionGranularity: NSInteger {
- WKSelectionGranuarityDynamic,
- WKSelectionGranularityCharacter
- }
- WKSelectionGranularity;
1.
- userInterfaceDirectionPolicy
用户界面元素的方向性
- @property(nonatomic) WKUserInterfaceDirectionPolicy userInterfaceDirectionPolicy;
2.
- WKUserInterfaceDirectionPolicy
用于确定 web 视图中用户界面元素方向性的策略
- typedef enum WKUserInterfaceDirectionPolicy: NSInteger {
- WKUserInterfaceDirectionPolicyContent,
- WKUserInterfaceDirectionPolicySystem
- }
- WKUserInterfaceDirectionPolicy;
1.
- dataDetectorTypes
所需的数据检测类型
- @property(nonatomic) WKDataDetectorTypes dataDetectorTypes;
2.
- WKDataDetectorTypes
检测到的数据类型
- typedef enum WKDataDetectorTypes: NSUInteger {
- WKDataDetectorTypeNone = 0,
- WKDataDetectorTypePhoneNumber = 1 << 0,
- WKDataDetectorTypeLink = 1 << 1,
- WKDataDetectorTypeAddress = 1 << 2,
- WKDataDetectorTypeCalendarEvent = 1 << 3,
- WKDataDetectorTypeTrackingNumber = 1 << 4,
- WKDataDetectorTypeFlightNumber = 1 << 5,
- WKDataDetectorTypeLookupSuggestion = 1 << 6,
- WKDataDetectorTypeAll = NSUIntegerMax,
- WKDataDetectorTypeSpotlightSuggestion = WKDataDetectorTypeLookupSuggestion
- }
- WKDataDetectorTypes;
- NSObject
- NSCoding
- NSCopying
来源: http://www.cnblogs.com/mtystar/p/7026915.html