app.js - 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应用的生命周期函数,用法如下:

  1. App(appConfig);

appConfig参数说明:

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

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

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

App函数示例代码:

  1. App({
  2. options: {
  3. debug: false
  4. },
  5. /**
  6. * 当wap2app初始化完成时,会触发 onLaunch
  7. */
  8. onLaunch: function() {
  9. console.log('launch');
  10. },
  11. /**
  12. * 当wap2app启动,或从后台进入前台显示,会触发 onShow
  13. */
  14. onShow: function() {
  15. console.log('show');
  16. },
  17. /**
  18. * 当wap2app从前台进入后台,会触发 onHide
  19. */
  20. onHide: function() {
  21. console.log('hide');
  22. }
  23. });

注意:

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

使用场景举例

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

注册页面

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

API介绍

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

  1. Page(id,pageConfig);

id参数说明:

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

pageConfig参数说明:

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

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

Page函数示例代码:

  1. Page('page1', {
  2. /**
  3. * 当页面显示时触发
  4. */
  5. onShow: function(options) {
  6. console.log('page1 show');
  7. },
  8. /**
  9. * 当页面关闭时触发
  10. */
  11. onHide: function() {
  12. console.log('page1 hide');
  13. }
  14. });

注意:

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

使用场景举例

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

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

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

  1. {
  2. "webviewId": "login",//登录
  3. "matchUrls": [
  4. {"pathname": "/login"}
  5. ]
  6. },
  7. {
  8. "webviewId": "usercenter",//用户中心
  9. "matchUrls": [
  10. {"pathname": "/usercenter"}
  11. ]
  12. }

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

  1. Page('usercenter', { //用户中心页面扩展
  2. /**
  3. * 用户中心页面显示时触发
  4. */
  5. onShow: function() {
  6. //获取登录页的webview
  7. var loginWebview = plus.webview.getWebviewById("login");
  8. if(loginWebview){
  9. loginWebview.close("none");//关闭登录页
  10. }
  11. }
  12. });