美文网首页
WKWebview官方API整理

WKWebview官方API整理

作者: senpaiLi | 来源:发表于2020-04-20 09:33 被阅读0次

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

    需要注意的点:
    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
    

    相关文章

      网友评论

          本文标题:WKWebview官方API整理

          本文链接:https://www.haomeiwen.com/subject/cijamhtx.html