如何将h5转换编译为微信小程序?
FinClip如何将H5工程转为小程序
小程序独立出来了很多原生APP的组件,这对于HTML5的老兵是一种痛苦,小程序自己开发了一套WXML标记语言和WXSS样式语言,并非直接使用标准的HTML5+CSS3,小程序与传统HTML5还是有明显的区别。
微信小程序自开放出来到现在也有一段时间了,相信其底层架构也被琢磨得差不多了。微信小程序本身是双线程运行的结构,而 h5 页面是单线程的运行模式,因此两者无法直接互通。全端云微信小程序的运行模式如下:
微信小程序本身提供了 web-view 组件来支持在全端云微信小程序中嵌入 h5 页面,但是 web-view 组件在使用上还是有一些限制:不支持个人类型与海外类型的小程序、不支持全屏、页面与小程序通信不方便、很多小程序接口无法直接调用等。
如果无法使用 web-view,这里还有一条路可以走,利用FinClip工具来将 h5 页面转换成小程序。
那对于HTML5应用的咱办呢?
如何快速的从HTML5转换成小程序呢?
甚至是在考虑小程序与HTML5应用是同一个程序,方便统一维护。
准备工作:
下载一个工具编译一下就可以啦!手把手教学一下:
下载安装FIDE小程序开发工具:https://www.finclip.com/mop/document/develop/developer/fide-update-log.html#
使用开发工具新建一个小程序
在小程序中嵌入H5页面方法
小程序实现:
使用web-view组件,在src属性中写入H5页面url即可
<web-view src=”www.baidu.com”></web-view>
也可以使用数据绑定方式
<web-view :src=”{{webViewUrl}}”></web-view>
在本地磁盘中找到对应项目,将项目文件压缩为zip包
上传小程序代码包
在【开发设置-代码包管理】中,上传该代码包
完成域名配置
在【开发设置-域名管理】中,完成对应域名请求设置
通过 FinClip APP 或已集成SDK的APP查看小程序
原理
原理其实很简单,h5 页面在浏览器运行的过程就是解析 html 到渲染 dom 树的过程,然后提供一些 dom/bom 接口给 js 调用。那么在小程序中我们把这一套给模拟一遍就行了,方法很暴力,但是却意外的有效:因为给 h5 页面提供了类似浏览器的环境,实现了最底层的适配,所以理论上来说那些通用的框架和库也能支持运行。上面的例子中就表明了 jQuery 是能够运行的,像 react、vue 也是可以做到支持的。
微信小程序是双线程的运行模式,视图层专注于渲染,逻辑层专注于逻辑。逻辑层是在一个纯净的 js 线程中跑,那里没有 dom/bom 接口,只能运行页面逻辑层的代码。要模拟浏览器环境,最基本的就是要在逻辑层里模拟出一棵 dom 树,本质上和建立一棵虚拟树类似,因为它并不是真实的 dom 树。整个流程简单来说是这样的:
不管是页面中的静态 html 内容还是使用 innerHTML 等接口动态插入的 html 内容都可以走上面的流程来进行 dom 树的创建。dom 树创建比较简单,只是细节比较多,此处的关键是将创建好的 dom 节点映射到全端云微信小程序的自定义组件,利用自定义组件的特性可以轻易的将我们创建好的 dom 树给渲染出来。