WKWebView新特性及JS交互

本文详细介绍了WKWebView的新特性,包括性能提升、JavaScript的Nitro库支持、HTML5特性等,并通过实例展示了WKWebView的创建、页面导航、KVO、WKUIDelegate、WKScriptMessageHandler和WKNavigationDelegate的使用,强调了WKWebView在iOS开发中的优势,以及如何实现与JavaScript的高效交互。
摘要由CSDN通过智能技术生成

声明

本博文原始地址在:
http://mp.weixin.qq.com/s?__biz=MzIzMzA4NjA5Mw==&mid=400327803&idx=1&sn=2a09fa94dd605a9f03bbc16f998e5717#rd

本博客不会在此处更新文章,请关注微信公众号,更新的内容只会是在原文更新。

引言

一直听说WKWebViewUIWebView强大许多,可是一直没有使用到,今天花了点时间看写了个例子,对其API的使用有所了解,为了日后能少走弯路,也为了让大家更容易学习上手,这里写下这篇文章来记录如何使用以及需要注意的地方。

温馨提示:本人在学习使用过程中,确实有此体会,WKWebView的确比UIWebView强大很多,与JS交互的能力显示增强,在加载速度上有所提升。

WKWebView新特性

  • 性能、稳定性、功能大幅度提升
  • 允许JavaScript的Nitro库加载并使用(UIWebView中限制)
  • 支持了更多的HTML5特性
  • 高达60fps的滚动刷新率以及内置手势
  • GPU硬件加速
  • KVO
  • 重构UIWebView成14类与3个协议,查看官方文档

准备工作

首先,我们在使用的地方引入模块:

import Webkit

在学习之前,建议大家先点击WKWebView进去阅读里面的相关API,读完一遍,有个大概的印象,学习起来就很快了。

其初始化方法有:

public init()
public init(frame: CGRect)
public init(frame: CGRect, configuration: WKWebViewConfiguration)

加载HTML的方式与UIWebView的方式大致相同。其中,loadFileURL方法通常用于加载服务器的HTML页面或者JS,而loadHTMLString方法通常用于加载本地HTML或者JS:

public func loadRequest(request: NSURLRequest) -> WKNavigation?

// 9.0以后才支持   
@available(iOS 9.0, *)
public func loadFileURL(URL: NSURL, allowingReadAccessToURL readAccessURL: NSURL) -> WKNavigation?

// 通常用于加载本地HTML或者JS
public func loadHTMLString(string: String, baseURL: NSURL?) -> WKNavigation?

// 9.0以后才支持
@available(iOS 9.0, *)
public func loadData(data: NSData, MIMEType: String, characterEncodingName: String, baseURL: NSURL) -> WKNavigation

与之交互用到的三大代理:

  • WKNavigationDelegate,与页面导航加载相关
  • WKUIDelegate,与JS交互时的ui展示相关,比较JS的alert、confirm、prompt
  • WKScriptMessageHandler,与js交互相关,通常是ios端注入名称,js端通过window.webkit.messageHandlers.{NAME}.postMessage()来发消息到ios端

创建WKWebView

首先,我们在ViewController中先遵守协议:

class ViewController: UIViewController, WKScriptMessageHandler, WKNavigationDelegate, WKUIDelegate

我们可以先创建一个WKWebView的配置项WKWebViewConfiguration,这可以设置偏好设置,与网页交互的配置,注入对象,注入js等:

// 创建一个webiview的配置项
let configuretion = WKWebViewConfiguration()

// Webview的偏好设置
configuretion.preferences = WKPreferences()
configuretion.preferences.minimumFontSize = 10
configuretion.preferences.javaScriptEnabled = true
// 默认是不能通过JS自动打开窗口的,必须通过用户交互才能打开
configuretion.preferences.javaScriptCanOpenWindowsAutomatically = false

// 通过js与webview内容交互配置
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Web开发中,JSNative交互是指通过JavaScript(JS)代码和本地代码进行相互通信的过程。JS是一种脚本语言,在浏览器中执行,而Native是指底层本地代码,如Android的Java或iOS的Objective-C/Swift。 JSNative交互的目的是为了在Web应用程序中获得更强大的功能和更好的用户体验。通过JSNative交互,可以实现以下功能: 1. 调用Native功能:JS可以通过与Native进行通信,调用本地功能,例如访问设备的传感器、获取设备信息、发送本地推送等。这样,Web应用程序就可以更好地与设备硬件和本地特性进行交互。 2. 获取Native数据:JS可以向Native请求数据,例如获取本地数据库的数据、获取设备的位置信息等。通过这种方式,Web应用程序可以使用本地的数据,实现更为复杂和个性化的功能。 3. 更新Web页面:Native可以通过调用JS的代码来更新Web页面的内容,例如在Native端接收到新的数据时,可以通过JS将数据更新到Web页面上,实现实时的页面刷新。 为了实现JSNative交互,通常有以下几种方式: 1. 使用WebView提供的接口:在移动应用中,使用WebView作为嵌入式浏览器可以实现JSNative交互。通过WebView提供的接口,可以在JSNative之间进行消息传递和函数调用。 2. 使用JavaScriptBridge:JavaScriptBridge是一种将JSNative进行桥接的技术。通过在Native代码中注入JavaScriptBridge对象,并在JS代码中引用相关的Native方法和属性,可以实现JSNative的相互调用。 3. 使用消息机制:在一些特定的平台上,还可以通过消息机制实现JSNative之间的通信。例如,Android平台可以使用JavaScriptInterface来定义JS可以调用的Native方法,而iOS平台可以使用WKWebView提供的消息机制进行JSNative交互。 总结来说,JSNative交互是为了实现Web应用程序与本地功能和数据的交互,通过使用WebView接口、JavaScriptBridge或消息机制,可以实现JSNative的相互调用和通信。这样一来,Web应用程序就能获得更多的功能和更好的用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值