WKNavigationDelegate
是webKit框架中的一个代理协议,用于处理webVIew导航和与导航相关的事件
WKWebView
是IOS 8+引入的一个高性能web视图控件,
相关API
webView:didCommitNavigation
导航已经陈工完成且页面内容已经加载时调用此方法,这标志着导航的一些部分已经开始,但是页面的所有资源可能尚未加载完成。
webView:didFinishNavigation
导航完成时调用这个方法,相较于上面就是已经全部加载完成,此时页面已经可以交互
ebView:decidePolicyForNavigationAction:decisionHandler
在发起一个导航操作时调用此方法,用于决定是否应该允许导航继续进行。你可以检查导航操作的类型和属性,然后决定是否要中断导航或允许它继续。
webView:decidePolicyForNavigationResponse:decisionHandler
与上一个方法类似,但是在接收到导航响应后调用。你可以根据导航的响应信息来决定是否中断导航。
webViewWebContentProcessDidTerminate
当与 Web 内容的进程终止时调用此方法。这可能会发生在资源使用过多时或由于其他原因导致内部的 Web 内容进程重启。
(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
WKScriptMessageHandler协议的一个方法
用WKWebView加载网页时处理从网页中发送的javaScript
主要作用是从网页向本地应用程序发送数据或执行某些本地操作,例如脚本和原声代码进行交互
参数:
userContentController:用于管理用户脚本的 WKUserContentController 对象。通过它,可以向 WKWebView 添加或删除用户脚本以处理 JavaScript 消息。
message:这是一个包含接收到的 JavaScript 消息的 WKScriptMessage 对象。该对象包括以下信息:
name:JavaScript 消息的名称,是一个字符串,可以用于标识不同类型的消息。
body:JavaScript 消息的主体,通常是一个对象或字符串,包含从网页发送给本地应用程序的数据。
核心作用是实现webVIew和原生程序之间的双向通信
这个方法需要先让要显示webView的superView添加JS消息处理器
//super是需要显示webView的view
superView.configuration.userContentController addScriptMessageHandler:self name:messageHandleName
当window.webkit.messageHandlers.YourHandlerName.postMessage(messageBody)
发送消息来的时候这个消息处理器会被触发,就会调用(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
后面的name参数是制定的消息处理器的名字
当使用JS代码发送消息时就需要使用相同的名字 比如
window.webkit.messageHandlers.YourHandlerName.postMessage(messageBody)来发送