文章目录
  1. 1. WKWebView使用技巧
    1. 1.1. 将WKWebView配置成属性
    2. 1.2. 加载网址的简化操作
    3. 1.3. 读取html片段
    4. 1.4. 限制访问站点
    5. 1.5. 用外部浏览器加载
    6. 1.6. 加载进度
    7. 1.7. 读取标题
    8. 1.8. 用户访问过的页面
    9. 1.9. 页面注入JavaScript
    10. 1.10. Cookies的读取、删除
    11. 1.11. UserAgent确定访问用户类型
    12. 1.12. 截屏快照

WKWebView使用技巧

将WKWebView配置成属性

webview很多时候是需要全屏展示的,但是如果是在控制器的viewDidLoad()方法中创建webview,并且展示到全屏,效率其实是不高的,这里有个简单实用的方法:就是给相应的控制器创建一个属性,并且在loadView()方法中创建webview,并将其添加到控制器上去. 这样的操作会让显示效率提高一些,并且使用过程中也会方便很多.

加载网址的简化操作

webview需要加载远程内容的话,需要操作其实还是有几步的,就是需要将提供的字符串网址,装换成URL类型的链接,然后创建Request并添加URL,然后再让webview来加载它. 整个过程有一些步骤其实是可复用步骤,普通用法一般均是给定”网址字符串”,然后不关心中间件的创建,所以可以将中间操作都用分类来封装起来,将其做成一个固定加载方法,然后直接每次使用的时候,调用相应方法,并且传入”网址字符串”即可.

读取html片段

WKWebView可以加载html片段,需要使用loadHTMLString方法,然后将html字符串段直接提供给该方法即可.需要注意的是,如果还需要从bundle中加载css或者图片等资源,需要指定从bundle的resource中读取.

限制访问站点

配置代理,然后在代理方法decidePolicyFor中添加排除逻辑来判定相应的网页是否允许被加载.

用外部浏览器加载

类似4点的操作,配置好代理后,在代理方法decidePolicyFor中添加跳转逻辑,需要用外部浏览器打开的则使用UIApplication的open方法打开即可.

加载进度

这个需求是个比较常见的需求,就是监控网页的加载进度,在某些需要的步骤中进行一些特殊操作.最常见的就是定制加载进度条,展示网页加载进度,还有一些其他操作等等. 具体操作就是首先通过kvo,添加estimetedPropress属性的监听,然后在observeValueForKeypath的监听回调方法中,区分出来estimetedPropress

读取标题

可以正常使用webView.title来读取网页标题,但是随着用户浏览,页面可能发生跳转,或者其他情况下,标题会改变,而需求又需要标题随时更新的话,那就可以采用和加载进度同样的操作方式:先注册监听webView的title属性,然后在观察者回调方法里,通过对比是否是标题发生了变化,来进行标题的改变.

用户访问过的页面

如果想读取用户访问的页面的记录,来进行相关的操作,那就使用backForwardList属性,这个属性包含了backList和forwardList两个数组. 在每个列表中,都可以读取每个被浏览页面的URL,以及被使用的标题等.

页面注入JavaScript

在你的webView加载一些内容后,你可以使用evaluateJavaScript()方法在已渲染的页面中执行JavaScript.你只需要提供一些用于执行的JavaScript就可以了.例如:

1
2
3
4
5
webView.evaluateJavaScript("document.getElementById('username').innerText") { (result, error) in
if let result = result {
print(result)
}
}

Cookies的读取、删除

你可以使用web view的httpCookieStore属性,读取一个网站相关的完整cookies列表.它被埋藏在configuration.websiteDataStore属性下,但是只要你找到它,就可以用getAllCookies()来获取cookies列表,或用delete()来删除某个cookie.

UserAgent确定访问用户类型

用户代理让你的服务器鉴别出正在访问页面的是哪种浏览器,常用于开启/限制某些特性是否可用.如果你正在阅读自己的服务器上的网页,你可以把用户代理调整为你自己的字符串,这样你就可以鉴别你app的用户:
webView.customUserAgent = "My hope App"
注意:当访问其他资源时,你确实能够改变用户代理,但是记住一些网站也许会读取用户代理字符串,如果这和它期望的不同,会感到混乱.

截屏快照

你可以用常规的drawHierarchy()方法把页面转化为图片,此外还可以用WebKit的takeSnapshot()方法.它可以让你剪裁或调整图像大小.

文章目录
  1. 1. WKWebView使用技巧
    1. 1.1. 将WKWebView配置成属性
    2. 1.2. 加载网址的简化操作
    3. 1.3. 读取html片段
    4. 1.4. 限制访问站点
    5. 1.5. 用外部浏览器加载
    6. 1.6. 加载进度
    7. 1.7. 读取标题
    8. 1.8. 用户访问过的页面
    9. 1.9. 页面注入JavaScript
    10. 1.10. Cookies的读取、删除
    11. 1.11. UserAgent确定访问用户类型
    12. 1.12. 截屏快照