您的位置:首页 > 移动开发

基于 WKWebView 的混合开发框架(网站生成ios应用)

2016-04-05 18:36 776 查看

WKWebView 简介

WKWebView 是苹果在 iOS 8 中引入的新组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老旧笨重特别是内存占用量巨大的问题。

苹果将 UIWebViewDelegate 与 UIWebView 重构成了 14 个类和 3 个协议,引入了不少新的功能和接口,这可以在一定程度上看做苹果对其封锁 Web View 内核的行为作出的补偿:既然你们都说 UIWebView 太渣,那我就造一个不渣的给你们用呗~~ 众所周知,连 Chrome 的 iOS 版用的也是 UIWebView 的内核。

WKWebView 有以下几大主要进步:

将浏览器内核渲染进程提取出 App,由系统进行统一管理,这减少了相当一部分的性能损失。

js 可以直接使用已经事先注入 js runtime 的 js 接口给 Native 层传值,不必再通过苦逼的 iframe 制造页面刷新再解析自定义协议的奇怪方式。

支持高达 60 fps 的滚动刷新率,内置了手势探测。

开始使用 WKWebView

1. 创建XCode项目

创建一个名为 WKWebViewTest 的 Single View Application 项目









2. 开始使用 WKWebView

在 ViewController 顶部引入 WebKit

import WebKit


之后创建一个 WKWebView 类型的成员变量,并对其进行初始化

var webView: WKWebView!

override func viewDidLoad() {
super.viewDidLoad()

// 指定地址
let url = NSURL(string : "http://baidu.com");

// 请求
let request = NSURLRequest(URL : url!);
// 加载请求
self.webView.loadRequest(request)
}


3. 结合UIWebView

由于WKWebView只能全屏,无法自定义控制大小。结合UIWebView实现

将web view拖动到视图中,并调整好大小



在web view上 -》右键 -》Referencing OutLets, 拖动到关联编辑ViewController 中。

@IBOutlet weak var containerView: UIWebView!


取消Use Auto Layout和Use Size Classes选项



调整属性自适应



4. 加入js调用app代码

调整ViewController,加入WKScriptMessageHandler

class ViewController: UIViewController, WKScriptMessageHandler {


加入JS接收函数(必须加,不然会出现错误)

/**
*  此方法为js接收参数(方法名不可变,改变WKScriptMessageHandler引入会出现错误)
*/
func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
//
print(message.name);
print(message.body)

}


4. 添加载入视图代码(在ViewController.swift中加入)

override func loadView() {
super.loadView()
// 获得WK控制管理器
let contentController = WKUserContentController()
// 通过控制管理器来添加js对象
// html页面可以通过window.webkit.messageHandlers.phone.proessMessage('XXXX')来调用
contentController.addScriptMessageHandler(self, name: "phone")
// 获得WKWebView配置构造器
let config = WKWebViewConfiguration()
// 设置控制器
config.userContentController = contentController
// 构造一个WKWebView
// 第一个参数是CGRECT类型,意思就是构造容器范围,self.containerView.bounds是UIWebView的大小,
// 这样WKWebView的大小就与UIWebView 大小一致
self.webView = WKWebView(frame: self.containerView.bounds, configuration: config)
// 将WKWebView添加到UIWebView容器中,这样可以保证布局的一致性,
// 因为有的时候我们可能需要预留出顶部导航栏这时我们是需要UIWebView来进行调整
self.containerView.addSubview(self.webView)
}


5. 处理BUG(iOS 9 SDK 中默认不再支持访问非 HTTPS 的地址)

如果你用的是 Xcode 7,这时候你应该得到了一块雪白雪白的屏幕,我们遭遇了 bug。这是因为 iOS 9 SDK 中默认不再支持访问非 HTTPS 的地址,我们需要进行一些修改:

在 Info.plist 上右键,以源代码方式打开,在第一个 之前加入以下代码:

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>


示例源代码下载地址::http://download.csdn.net/detail/hanjiyu/9481868
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: