导航
| navigate | 对应 wx.navigateTo 或 wx.navigateToMiniProgram 的功能 |
|---|---|
| redirect | 对应 wx.redirectTo 的功能 |
| switchTab | 对应 wx.switchTab 的功能 |
| reLaunch | 对应 wx.reLaunch 的功能 |
| navigateBack | 对应 wx.navigateBack 的功能 |
| exit | 退出小程序,target="miniProgram"时生效 |
web-view
webview 指向网页的链接。可打开关联的公众号的文章,其它网页需登录小程序管理后台配置业务域名。
预览文件
wx.downloadFile({url: 'www.file.com/file.ppt',//可以是后台传过来的路径success: function(res) {const filePath = res.tempFilePathwx.openDocument({filePath: filePath,success: function(res) {//成功}})}})
小程序的运行环境
微信小程序运行在多种平台上:iOS(iPhone/iPad)微信客户端、Android 微信客户端、PC 微信客户端、Mac 微信客户端和用于调试的微信开发者工具。
各平台脚本执行环境以及用于渲染非原生组件的环境是各不相同的:
- 在 iOS 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,环境有 iOS 12、iOS 13 等;
- 在 Android 上,小程序逻辑层的 javascript 代码运行在 V8 中,视图层是由自研 XWeb 引擎基于 Mobile Chrome 内核来渲染的;
- 在 开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js 中,视图层是由 Chromium Webview 来渲染的。
- 在 PC 上,小程序逻辑层 javascript 和视图层 javascript 都是用 Chrome 内核
在 Mac 上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由 WKWebView 来渲染的,与 iOS 一致
平台差异
尽管各运行环境是十分相似的,但是还是有些许区别:
JavaScript语法和 API 支持不一致:语法上开发者可以通过开启ES6转ES5的功能来规避(详情);此外,小程序基础库内置了必要的Polyfill,来弥补API的差异(详情)。WXSS渲染表现不一致:尽管可以通过开启样式补全来规避大部分的问题,还是建议开发者需要在 iOS 和 Android 上分别检查小程序的真实表现。
使用 Page 构造器注册页面
//index.jsPage({data: {text: "This is page data."},onLoad: function(options) {// 页面创建时执行},onShow: function() {// 页面出现在前台时执行},onReady: function() {// 页面首次渲染完毕时执行},onHide: function() {// 页面从前台变为后台时执行},onUnload: function() {// 页面销毁时执行},onPullDownRefresh: function() {// 触发下拉刷新时执行},onReachBottom: function() {// 页面触底时执行},onShareAppMessage: function () {// 页面被用户分享时执行},onPageScroll: function() {// 页面滚动时执行},onResize: function() {// 页面尺寸变化时执行},onTabItemTap(item) {// tab 点击时执行console.log(item.index)console.log(item.pagePath)console.log(item.text)},// 事件响应函数viewTap: function() {this.setData({text: 'Set some data for updating view.'}, function() {// this is setData callback})},// 自由数据customData: {hi: 'MINA'}})
判断是否是刘海屏
// 判断ipxisIPXType () {let isIPX = falselet model = ['X', 'XR', 'XS', 11, 12, 13, 14]let statusBarHeight = 0let screenHeight = 0let ratio = 0uni.getSystemInfo({success (res) {model.forEach((e) => {if (res.model.indexOf('iPhone') != -1 && res.model.indexOf(e) != -1) {isIPX = true}})statusBarHeight = res.statusBarHeightscreenHeight = res.screenHeightratio = 750 / res.windowWidth}})let custom = uni.getMenuButtonBoundingClientRect()let customBar = custom.bottom + custom.top - statusBarHeightthis.globalData.isIPX = isIPX // 是否还是刘海屏this.globalData.ratio = ratio // 比例this.globalData.customBar = customBar //header高度this.globalData.statusBar = statusBarHeight // 状态栏的高度this.globalData.screenHeight = screenHeight // 屏幕高度this.globalData.safeBar = statusBarHeight / ratio //底部安全区域高度}
