WKWebview官方API整理

2020-04-20  本文已影响0人  senpaiLi

有人学习一篇文章会翻字典么,哎,还真有这种傻子

需要注意的点:
Call WebKit functions and methods only from your app’s main thread or main dispatch queue.

1、WKNavigationDelegate

wkwebview的导航行为,在webview接受、加载和完成导航请求过程中触发的回调。

// 当web视图开始接收web内容时调用
webView:didCommitNavigation:

// 当web内容开始加载到web视图时调用
webView:didStartProvisionalNavigation:

// 当web视图接收到服务器重定向时调用
webView:didReceiveServerRedirectForProvisionalNavigation:

//当web视图需要响应身份验证挑战时调用
webView:didReceiveAuthenticationChallenge:completionHandler:

// 当导航过程中发生错误时调用
webView:didFailNavigation:withError:

// 当web视图加载内容时发生错误时调用
webView:didFailProvisionalNavigation:withError:

// 导航完成后调用
webView:didFinishNavigation:

// 当Web视图的Web内容过程终止时调用
webViewWebContentProcessDidTerminate:

// 决定是否允许或取消导航
webView:decidePolicyForNavigationAction:decisionHandler:

// 已知response后,决定是否允许或取消导航
webView:decidePolicyForNavigationResponse:decisionHandler:

//优先级高于webView:decidePolicyForNavigationAction:decisionHandler:,多了一个preferences配置
webView:decidePolicyForNavigationAction:preferences:decisionHandler:

打开一个正常的网页调用顺序是这样的:
decidePolicyForNavigationAction
didStartProvisionalNavigation
decidePolicyForNavigationResponse
didCommitNavigation
decidePolicyForNavigationAction
didFinishNavigation

decidePolicyForNavigationAction可能会执行多次,因为重定向等原因
2、WKProcessPool

一个WKProcessPool对象,相当于一个webcontent队列池

注意:WK Process Pool对象只是一个不透明的令牌,没有自己的属性或方法。

官方信息:
与web视图关联的进程池由其web视图配置指定。 每个Web视图都被赋予自己的Web内容进程,直到达到实现定义的进程限制;之后,具有相同进程池的Web视图最终共享Web内容进程。

所以每个WKWebview都是一个进程,默认cookie不能共享。所以只能我们手动来实现,对webview的configuration.processPool进行赋值共享。

3、WKWindowFeatures

当请求新的web视图时,WKWindow Feature对象指定包含窗口的可选属性。
属性如下(均为只读,指示作用):

allowsResizing: 一个布尔值,指示包含的窗口是否应该可调整大小,或者如果未指定可调整大小,则为零。

height
width
x
y

menuBarVisibility: 一个布尔值,指示菜单栏是否应该是可见的,如果没有指定菜单栏的可见性,则为零。
statusBarVisibility:一个布尔值,指示statusBar是否可见
toolbarsVisibility:一个布尔值,指示工具栏是否可见

4、WKWebView

显示交互式网页内容的对象,例如应用程序中的浏览器。使用它来嵌入web页面

WKWebview统一了iOS,macOS的web功能,继承于UIView/NSView
注意:在iOS 8.0以后,使用WKWebView,不要再使用UIWebView

提示: 您可以在WKWeb视图中使用httpBody内容进行POST请求。(我看到文章说,loadRequest是不能使用httpBody,会丢失,这个下去再看)

使用注意事项:
1、goBack、goForward方法可作为按钮点击事件,用来允许用户前进、后退,canGoBack,canGoForward属性可用来指示按钮是否可点击
2、一般来说,前端页面的手机号码会自动标记为可点击状态,点击后跳转到拨打页。想要关掉的话,设置dataDetectorTypes属性去除掉WKDataDetectorTypePhoneNumber
3、setMagnification:centeredAtPoint:可用来设置页面默认放大比例,此后用户可用手势放大缩小

//类方法,指示wkwebview是否天然的支持此scheme
+handlesURLScheme:

configuration:一个WKWebViewConfiguration copy过来的对象,初始化webview时的属性集合
//初始化方法
-initWithFrame:configuration:

scrollView:与webview相关的滑动页
title:页面标题,一般使用KVO获取,前端页面的<title>标签
URL:正在访问的url
customUserAgent:自定义UA(获取webviewUA的方法,"navigator.userAgent",
大部门时间我们需要添加版本信息等)
serverTrust:SecTrustRef类型,用来评估信任的对象,不知道咋用

//两个代理
navigationDelegate
UIDelegate

estimatedProgress:预估加载进度,0~1
hasOnlySecureContent: 一个布尔值,指示页面上的所有资源是否已通过安全加密连接加载。
//加载字符串html,一般用不到这个方法
//baseURL: 用于解析文档中的相关URL的URL,多处用到
-loadHTMLString:baseURL:
loading:指示该webview是否还在加载数据
//重载web页面
-reload
// 重新加载当前页面,如果可能的话,使用缓存验证条件执行端到端重验证。
-reloadFromOrigin
//停止加载
-stopLoading
//设置web页面内容
-loadData:MIMEType:characterEncodingName:baseURL:
//导航到文件系统上请求的文件URL
-loadFileURL:allowingReadAccessToURL:

allowsMagnification:指示是否支持手势放大缩小,默认为false
magnification:指示当前缩放比例
//设置当前缩放比例,缩放中心点
-setMagnification:centeredAtPoint:

allowsBackForwardNavigationGestures: 一个布尔值,指示水平滑动手势是否会触发后向前列表导航
backForwardList:webview向前向后的列表,WKBackForwardList对象
canGoBack:指示是否可返回
canGoForward:指示是否可前进
allowsLinkPreview: 一个布尔值,它确定是否按下链接显示链接的目标预览。
此属性可用于支持3D触摸的设备。 在iOS10和更高版本中,默认值为YES;在此之前,默认值为NO。
//页面后退
-goBack
//页面前进
-goForward
//跳转到固定的历史item,对象为WKBackForwardListItem
-goToBackForwardListItem:
//跳转到一个requestURL
-loadRequest:
//执行一段js代码及其回调
-evaluateJavaScript:completionHandler:
// 获取视图可见视口的快照 >=11.0
-takeSnapshotWithConfiguration:completionHandler:

5、WKWebViewConfiguration

初始化webview时的属性集合
只有在初始化wkwebview是才管用。配置完成后,修改配置不起作用。

applicationNameForUserAgent: 设置UA中的APP名称,默认为Safari/605.1.15、Mobile/15E148等
preferences:(WKPreferences) web视图要使用的首选项对象。
processPool: 获取视图的Web Content过程的进程池。
userContentController:(WKUserContentController) 与webview关联的用户内容控制器
websiteDataStore:(WKWebsiteDataStore) 网站数据存储,供webview使用

ignoresViewportScaleLimits:指示用户是否总是可以缩放
默认为false,该属性会覆盖掉网页中的user-scalable HTML属性

suppressesIncrementalRendering:默认为false
指示WebView是否抑制内容呈现,直到它完全加载到内存中。

allowsInlineMediaPlayback:
指示HTML5视频是内联播放还是使用本机全屏控制器。ipad默认为true,iPhone默认为false
true:内联播放视频
false以使用本机全屏控制器
在iPhone上的HTML文档中添加视频元素时,还必须包含playsinline属性。
(注意:在iOS10.0之前创建的应用程序必须使用webkit-playsinline属性。)

allowsAirPlayForMediaPlayback:指示是否支持视频播放的投屏(AirPlay),默认为true
allowsPictureInPictureMediaPlayback:指示是否支持视频播放的画中画模式
默认为true,(画中画为小窗口)
mediaTypesRequiringUserActionForPlayback:(WKAudiovisualMediaTypes)
确定哪种视频类型需要手势才能播放
WKAudiovisualMediaTypes:多媒体类型,有none,音频,视频,all

selectionGranularity:(WKSelectionGranularity)
 用户可以在web视图中交互选择内容的粒度级别。
默认为动态的。

dataDetectorTypes:(WKDataDetectorTypes) 所需的数据检测类型,默认为null
指定数据检测类型值可以增加与该值匹配的网页内容的交互性。

userInterfaceDirectionPolicy:(WKUserInterfaceDirectionPolicy)
设置用户界面元素的方向策略
content:默认的,方向性遵循CSS/HTML/XHTML规范
system: 方向性遵循视图的用户界面布局方向属性

//设置scheme的自定义请求,貌似也可以用来用来做资源替换
-setURLSchemeHandler:forURLScheme:
-urlSchemeHandlerForURLScheme:

defaultWebpagePreferences:此枚举默认值为 WKContentModeRecommended,
在 iPhone 和 iPad mini 上映射为 WKContentModeMobile
在其他 iPad 上则为 WKContentModeDesktop
因此 iPad 上打开网页默认显示桌面版本(即电脑版)
表现为UA不同
6、WKPreferences

封装webview的首选项设置
webview的首选项被webview configuration指定

minimumFontSize:页面最小字体,默认为0(谁傻到去配置这个)
tabFocusesLinks:无介绍
javaScriptCanOpenWindowsAutomatically:iOS默认为false,macOS为true
指示Java脚本是否可以在没有用户交互的情况下打开窗口
javaScriptEnabled:默认值是YES。 将此属性设置为NO禁用由网页加载或执行的Java脚本。 
此设置不影响用户脚本。 参见 WKUserContentController

fraudulentWebsiteWarningEnabled:启动欺诈网络警告(iOS 13+)
7、WKUIDelegate

提供了网页呈现在客户端中的方法回调

创建一个新的webview时回调
webView:createWebViewWithConfiguration:forNavigationAction:windowFeatures:

前端调用弹窗时的三种回调,我们一般使用TextInput来模拟callback
webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:
webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:completionHandler:
webView:runJavaScriptTextInputPanelWithPrompt:defaultText:initiatedByFrame:completionHandler:

通知APP dom窗口已经关闭
webViewDidClose:

显示文件上传面板,如果不实现,点击上传的效果就跟取消一样
webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:

8、WKNavigation

一个WKNavigation对象包含跟踪网页加载进度的信息

WKNavigation对象从webview加载方法返回,并传递给WKNavigationDelegate,以便从开始到结束唯一地标识网页加载。 它没有自己的方法和属性

附带一个WKContentMode属性,详见前面文档

9、WKNavigationAction

一个WKNavigationAction对象包含有关可能导致导航的操作的信息,用于决策。

request:当前webview记载的链接request
sourceFrame:请求导航的帧
targetFrame:目标帧,或者为nil表示新开一个页面
buttonNumber: 导致请求导航的鼠标按钮的数量(啥意思?)
modifierFlags: 在请求导航时有效的修饰符键
navigationType:(WKNavigationType)触发导航的事件类型

WKNavigationType:
WKNavigationTypeLinkActivated: 用户激活了带有href属性的链接
WKNavigationTypeFormSubmitted:提交了表单
WKNavigationTypeBackForward:后退或者前进
WKNavigationTypeReload:页面刷新
WKNavigationTypeFormResubmitted:表单重新提交,比如(前进后台刷新)
WKNavigationTypeOther:其他
10、WKNavigationResponse

一个WKNavigationResponse对象包含有关导航响应的信息,用于决策。

canShowMIMEType:bool值,指示WebKit是否可以本机显示响应的MIME类型
forMainFrame:指示获取当前的网络请求是否是为main frame创建的
response:(NSURLResponse)网络请求的响应
11、WKBackForwardList、WKBackForwardListItem

一个WKBackForwardList对象维护一个访问页的列表,用于返回并转发到最近的页面。(一般被wkwebview调用)

注意:
一个WKBackForwardList对象只维持一份列表数据,并不执行实际的页面加载(换句话说,它不发出任何的客户端请求)

backItem:上一个页面item,如果没有为nil
currentItem:当前页面item
forwardItem:下一个页面item,如果没有为nil

-itemAtIndex: 返回距离currentItem index距离的item
 index表示所需列表项相对于当前项的索引:currentItem为0,backItem为-1,forwardItem为1,以此类推。
如果没有返回nil

backList:先于currentItem的列表
forwardList:接在currentItem之后的列表

WKBackForwardListItem:
URL:相当于当前webview的URL
initialURL:创建item的URL
title:相当于当前webview的title
上一篇下一篇

猜你喜欢

热点阅读