DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2017-09-14 16:48
  • 更新:2020-06-09 09:38
  • 阅读:60282

app.js - wap2app教程

分类:wap2app

app.js是为了弥补sitemap.json的格式限制,而提供的基于JavaScript的可编程增强方案。
app.js里写的js代码,运行在本地一个独立的、不可见的Webview中(注意不是运行在首页Webview里)。
开发者可以在app.js中随意写代码,比如通过plus.webview的api操作某个Webview。但app.js里有2个限制:

  • 限制1. app.js里不能进行dom操作,因为app.js的运行环境里并没有真实dom存在;如果开发者要操作某个Webview里的dom,那么应该通过plus.webview的evalJS的api,给目标Webview注入一段js代码进行dom操作。

  • 限制2. app.js里的所有js代码,都要归属于某个wap2app已经提供的事件属性框架内,由这些指定的事件来触发。

目前app.js中提供的事件包括:

  • 注册应用:监听应用的启动及前后台切换
  • 注册页面:监听页面的显示、关闭

注册应用

App()函数用来注册一个wap2app应用。

API介绍

App()函数接受一个object类型的appConfig参数,用来设定wap2app应用的生命周期函数,用法如下:

App(appConfig);

appConfig参数说明:

参数 类型 说明
options Object 配置全局参数
onLaunch Function 生命周期函数,监听wap2app应用初始化;当wap2app初始化完成时触发,全局只触发一次。
onShow Function 生命周期函数,监听 wap2app 应用显示;当 wap2app 从后台进入前台显示时触发。
onHide Function 生命周期函数,监听 wap2app 应用隐藏;当 wap2app 从前台进入后台显示时触发。

前台、后台定义: 当用户按了设备 Home 键,wap2app应用并没有直接销毁,而是进入了后台;当再次打开wap2app应用时,又会从后台进入前台。
options参数说明:

参数 类型 默认值 说明
debug Boolean false 真机运行时,是否在 HBuilder 控制台打印日志。
lockOrientation String portrait-primary 锁定屏幕方向。更多可选值,参考锁定屏幕方向方法中的说明。

App函数示例代码:

App({  
    options: {  
        debug: false  
    },  
    /**  
     * 当wap2app初始化完成时,会触发 onLaunch  
     */  
    onLaunch: function() {  
        console.log('launch');  
    },  
    /**  
     * 当wap2app启动,或从后台进入前台显示,会触发 onShow  
     */  
    onShow: function() {  
        console.log('show');  
    },  
    /**  
     * 当wap2app从前台进入后台,会触发 onHide  
     */  
    onHide: function() {  
        console.log('hide');  
    }  
});

注意:

  • App()必须在app.js中注册,且不能注册多个

使用场景举例

开发者可以在应用启动(ap2app初始化完成)时,做一些系统级的工作,比如:

  • 升级更新检查:若有新版本则提示用户下载,详细参考升级检测 - wap2app教程
  • 推送消息监听:可以通过个推平台向用户发送推送消息,增加用户活跃度,详细参考消息推送 - wap2app教程
  • 统计数据上报:可以在应用启动时,将用户相关信息上报服务端,实现用户活跃度、留存率的统计工作,详细参考统计报表 - wap2app教程

注册页面

Page() 函数用来注册一个页面。

API介绍

Page() 函数接受id、pageConfig 两个参数,指定页面的生命周期函数;用法如下:

Page(id,pageConfig);

id参数说明:

id是字符串类型,表示webview的id,对应sitemap.json中配置的"webviewId"属性值。

pageConfig参数说明:

pageConfig是object类型,可配置的参数如下:

参数 类型 说明
onShow Function 生命周期函数,监听webview显示;当对应webview窗口显示时触发。
onHide Function 生命周期函数,监听webview关闭;当对应webview窗口关闭时触发。

Page函数示例代码:

Page('page1', {   
    /**  
     * 当页面显示时触发  
     */  
    onShow: function(options) {  
        console.log('page1 show');  
    },  
    /**  
     * 当页面关闭时触发  
     */  
    onHide: function() {  
        console.log('page1 hide');  
    }  
});

注意:

  • Page()必须在app.js中注册,同一个页面不能注册多个

使用场景举例

需求:用户登录成功后跳转用户中心,从用户中心页面返回时,不需要再看到登录界面;

解决方案:可以在用户中心页面显示时,通过API关闭登录界面。

假设在sitemap.json中有如下配置:

{  
    "webviewId": "login",//登录  
    "matchUrls": [  
        {"pathname": "/login"}  
    ]  
},  
{  
    "webviewId": "usercenter",//用户中心  
    "matchUrls": [  
        {"pathname": "/usercenter"}  
    ]  
}

则可以在app.js中通过如下代码实现:

Page('usercenter', { //用户中心页面扩展  
    /**  
     * 用户中心页面显示时触发  
     */  
    onShow: function() {  
        //获取登录页的webview  
        var loginWebview = plus.webview.getWebviewById("login");  
        if(loginWebview){  
            loginWebview.close("none");//关闭登录页  
        }  
    }  
});
7 关注 分享
Trust 赵梦欢 [已删除] My_Yoo m***@vip.qq.com w***@163.com n***@abrasivestocks.com

要回复文章请先登录注册

古芗

古芗

M站是一个单页面的wap站,M站有更新后,APP打开好像有缓存一样,还是原来的样子,怎么让APP打开是最新的?
2018-06-29 15:25
小灬绿谷

小灬绿谷

登陆成功进入用户中心后关闭登录页,这一步成功啦。但是问题又来啦,点击退出登陆后是直接打开了新的窗口首页,底部的选项卡也没有啦。
2018-06-16 22:26
hahabird

hahabird

如果tabbar 里面设置了登录页面。那用户 通过那个页面登录返回就是空白页!怎么办?
2018-05-23 23:20
阿旭

阿旭

我采用离线打包方式,app.js我怎么调试了,console.log的输出在哪里可以看到
2018-04-23 11:32
m***@vip.qq.com

m***@vip.qq.com

不错!
2018-04-19 21:04
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 a***@vip.qq.com :
可以在onShow方法中打印log,看是否触发了;如未触发,则说明页面未正确匹配
2018-04-01 15:07
a***@vip.qq.com

a***@vip.qq.com

照你场景举例的代码添加了,没有效果
2018-04-01 13:27
i***@163.com

i***@163.com

大道至简,微信小程序开发也有app、page的概念
2017-10-18 14:49