配置 app.json 文件

可以通过配置 app.json 文件,设置 SWAN 的界面、路径、多 TAB 等。

app.json 配置项列表如下

属性类型必填描述
pagesArray.< string>设置页面路径
windowObject设置页面展现
preloadRule配置 app.json 文件 - 图1Object分包预下载规则
tabBarObject底部 tab 栏的表现
requiredBackgroundModesstring[]需要在后台使用的能力,如「音乐播放」
subPackages配置 app.json 文件 - 图2Array.< object>分包结构配置
prefetchesObject Array预请求的配置列表
networkTimeoutObject网络超时

代码示例

在开发者工具中预览效果

  1. {
  2. "pages": [
  3. "component/component",
  4. "api/api"
  5. ],
  6. "subPackages": [
  7. {
  8. "root": "subpackage",
  9. "pages": [
  10. "pages/subpageone/subpageone",
  11. "pages/subpagetwo/subpagetwo"
  12. ]
  13. }
  14. ],
  15. "window": {
  16. "navigationBarTitleText": "Demo",
  17. "navigationBarBackgroundColor": "#000000",
  18. "navigationBarTextStyle": "white",
  19. "navigationStyle": "default",
  20. "backgroundColor": "#ffffff",
  21. "backgroundTextStyle": "dark",
  22. "enablePullDownRefresh": "true",
  23. "onReachBottomDistance":"50"
  24. },
  25. "preloadRule":
  26. {
  27. "pages/index": {
  28. "network": "all",
  29. "packages": ["subpackage"]
  30. }
  31. },
  32. "tabBar": {
  33. "list": [
  34. {
  35. "pagePath": "component/component",
  36. "text": "首页",
  37. "iconPath":"/images/API_normal.png",
  38. "selectedIconPath":"/images/API_selected.png"
  39. },
  40. {
  41. "pagePath": "api/api",
  42. "text": "详情",
  43. "iconPath":"/images/component_normal.png",
  44. "selectedIconPath":"/images/component_selected.png"
  45. }
  46. ],
  47. "backgroundColor" : "#ffffff",
  48. "borderStyle": "white",
  49. "color": "#000",
  50. "selectedColor": "#6495ED"
  51. },
  52. "requiredBackgroundModes": ["audio"],
  53. "prefetches": ["https://m.baidu.com", "https://m.baidu.com?query=${query}"],
  54. "networkTimeout": {
  55. "request": 30000,
  56. "connectSocket": 10000,
  57. "uploadFile": 10000,
  58. "downloadFile": 10000
  59. }
  60. }

pages

pages 接受一个数组,每一项都是一个字符串,指定 SWAN App 都有哪些页面。每一项代表页面的[路径 + 文件名],数组第一项代表 SWAN 初始页面。

SWAN 中新增或减少页面的话,需要在 pages 中进行配置。

配置项中不需要加文件后缀名, SWAN 会自动解析。

如,开发目录为:

  1. ├── app.js
  2. ├── app.json
  3. ├── app.css
  4. ├── project.config.json
  5. └── pages
  6. └── index
  7. ├── index.swan
  8. ├── index.css
  9. ├── index.js
  10. └── index.json
  11. └── detail
  12. ├── detail.swan
  13. ├── detail.css
  14. ├── detail.js
  15. └── detail.json

则需要在 app.json 中书写

代码示例

  1. {
  2. "pages":[
  3. "pages/index/index",
  4. "pages/detail/detail"
  5. ]
  6. }

提示

  • 开发者工具在app.json的pages中填写页面路径可自动生成文件夹。

window

用于设置 SWAN 的状态栏、导航条、标题、窗口背景色。

属性类型默认值描述最低版本
navigationBarBackgroundColorHexColor#000000导航栏背景颜色,如 "#000000"
navigationBarTextStyleStringwhite导航栏标题颜色,目前有效值 black/white
navigationBarTitleTextString导航栏标题文字内容
navigationStyleStringdefault导航栏样式,有效值:default(默认样式) custom(自定义导航栏),只保留右上角胶囊按钮2.10.34
backgroundColorHexColor#ffffff背景颜色
backgroundTextStyleStringdark下拉背景字体、loading 图的样式,有效值 dark/light
enablePullDownRefreshBooleanfalse是否开启下拉刷新
onReachBottomDistanceNumber50页面上拉触底事件触发时距页面底部距离,单位为 px

注意

  • navigationStyle 全局配置AndroidiOS从基础库版本 2.10.34 开始支持, 但子页面配置支持情况Android基础库版本 2.10.34开始支持,iOS基础库 3.0.39开始支持, 做低版本兼容时,通过 swan.getSystemInfo 或者 swan.getSystemInfoSync 获取百度 App版本号进行兼容判断,具体见下表;
  • 无其它特殊说明,请使用canIUse或者SWAN基础库版本进行兼容判断。

navigationStyle配置

顶bar设置iOSAndroidWebView组件页面备注
百度 App定义的顶bar无版本限制无版本限制无版本限制
顶bar全局透明设置基础库版本 2.10.34基础库版本 2.10.34不生效
顶bar子页面透明设置基础库版本 2.10.34基础库版本 2.10.34不生效每个page的json文件可以单独配置navigationStyle

适配提示

原生顶bar高度=状态栏高度(statusBarHeight)+顶部导航栏高度(navigationBarHeight);可通过 swan.getSystemInfo 或者 swan.getSystemInfoSync 获取。

代码示例

  1. {
  2. "window": {
  3. "navigationBarBackgroundColor": "#ffffff",
  4. "navigationBarTextStyle": "black",
  5. "navigationBarTitleText": "swan接口功能演示",
  6. "backgroundColor": "#eeeeee",
  7. "backgroundTextStyle": "light"
  8. }
  9. }

代码示例 - 错误写法

json文件看起来同 JavaScript 的对象表达方式十分相似,但是有所不同。

JSON的Key必须包裹在一个双引号中,在实践中,编写 JSON 的时候,忘了给 Key 值加双引号或者是把双引号写成单引号是常见错误。

  1. {
  2. window: {
  3. "navigationBarBackgroundColor": "#ffffff",
  4. "navigationBarTextStyle": "black",
  5. "navigationBarTitleText": "swan接口功能演示",
  6. "backgroundColor": "#eeeeee",
  7. "backgroundTextStyle": "light"
  8. }
  9. }

tabBar

用于设置客户端底部的tab栏:可通过tabBar设置tab的颜色、个数、位置、背景色等内容。

属性类型必填描述
backgroundColorHexColortab 的背景色。
borderStyleStringtabBar 边框颜色。有效值 black/white 两种边框颜色,默认值为 black 。
colorHexColortab 上文字的默认颜色。
listArraytab 的列表,列表个数2~5个。 list 接受一个数组,tab 按数组的顺序排序,每个项都是一个对象,其属性值如下:- pagePath:已在 pages 中定义的页面路径;类型:String;必填项。- text:tab上显示的文字信息;类型:String;必填项。- iconPath:图片路径,icon 大小限制为40kb,建议尺寸为 78px*78px,不支持网络图片;类型:String;非必填项。- selectedIconPath:选中时的图片路径,icon 规格同上;类型:String;非必填项。
selectedColorHexColortab 上的文字选中时的颜色。

代码示例

在开发者工具中预览效果

  1. {
  2. "tabBar": {
  3. "list": [
  4. {
  5. "pagePath": "pages/index/index",
  6. "text": "首页",
  7. "iconPath":"/images/API_normal.png",
  8. "selectedIconPath":"/images/API_selected.png"
  9. },
  10. {
  11. "pagePath": "pages/detail/detail",
  12. "text": "详情",
  13. "iconPath":"/images/component_normal.png",
  14. "selectedIconPath":"/images/component_selected.png"
  15. }
  16. ],
  17. "backgroundColor" : "#ffffff",
  18. "borderStyle": "white",
  19. "color": "#000",
  20. "selectedColor": "#6495ED"
  21. }
  22. }
  • 自定义tabbar

代码示例

在开发者工具中预览效果

  1. <view class="wrap">
  2. <view class="contentLast">
  3. <view class="icon-bg border-top border-bottom {{color}}">
  4. <view class="icon-item" data-index="index4" bindtap="setTabBarStyle">
  5. <image class="image" src="{{isActive4 == 'index4' ? 'https://b.bdstatic.com/searchbox/icms/searchbox/images/index-inverse-active.png' : 'https://b.bdstatic.com/searchbox/icms/searchbox/images/index-inverse-ash.png'}}" ></image>
  6. <view class="{{isActive4 == 'index4' ? 'imageNameColor' : 'imageNameColorAsh'}}">首页</view>
  7. </view>
  8. <view class="icon-item" data-index="tinyVideo4" bindtap="setTabBarStyle">
  9. <image class="image" src="{{isActive4 == 'tinyVideo4' ? 'https://b.bdstatic.com/searchbox/icms/searchbox/images/video-inverse-active.png' : 'https://b.bdstatic.com/searchbox/icms/searchbox/images/video-inverse-ash.png'}}" ></image>
  10. <view class="{{isActive4 == 'tinyVideo4' ? 'imageNameColor' : 'imageNameColorAsh'}}">小视频</view>
  11. </view>
  12. <view class="icon-item" data-index="centre4" bindtap="setTabBarStyle">
  13. <image class="image" src="{{isActive4 == 'centre4' ? 'https://b.bdstatic.com/searchbox/icms/searchbox/images/centre-inverse-active.png' : 'https://b.bdstatic.com/searchbox/icms/searchbox/images/centre-inverse-ash.png'}}"></image>
  14. <view class="{{isActive4 == 'centre4' ? 'imageNameColor' : 'imageNameColorAsh'}}">个人中心</view>
  15. </view>
  16. </view>
  17. </view>
  18. </view>
  1. Page({
  2. data: {
  3. color: 'firstTab',
  4. isActive: 'index1',
  5. isActive2: 'index2',
  6. isActive3: 'index3',
  7. isActive4: 'index4'
  8. },
  9. setTabBarStyle(e) {
  10. this.setData('isActive4', e.currentTarget.dataset.index);
  11. e.currentTarget.dataset.index === 'index4'
  12. ? this.setData({
  13. 'color': 'firstTab'
  14. })
  15. : '';
  16. console.log(this.data.color);
  17. e.currentTarget.dataset.index === 'tinyVideo4'
  18. ? this.setData({
  19. 'color': 'secondTab'
  20. })
  21. : '';
  22. e.currentTarget.dataset.index === 'centre4'
  23. ? this.setData({
  24. 'color': 'thirdTab'
  25. })
  26. : '';
  27. }
  28. });

requiredBackgroundModes

基础库 3.50.36 及以上版本支持

申明需要后台运行的能力,类型为数组。目前支持以下项目:

audio: 后台音乐播放

代码示例

  1. {
  2. "pages": ["pages/index/index"],
  3. "requiredBackgroundModes": ["audio"]
  4. }

注:在此处申明了后台运行的接口,开发版和体验版上可以直接生效,正式版还需通过审核。

prefetches

用于设置预请求的所有url的列表,该部分URL,会在进入小程序后自动发起请求(优于开发者代码加载)。当开发者再次发起request请求时可以增加cache参数,如果配置的prefetch请求已返回,则会直接返回请求结果,如果配置的prefetch请求还未返回,则当次request会继续之前未发送完成的request请求。

代码示例

在开发者工具中预览效果

  1. // app.json
  2. {
  3. prefetches: [
  4. 'https://m.baidu.com'
  5. ]
  6. }
  1. swan.request({
  2. url: 'https://m.baidu.com',
  3. usePrefetchCache: true,
  4. success: res => {
  5. console.log('缓存结果:', res);
  6. }
  7. });

注意: 配置项中可以增加变量,且该变量只能来自于打开小程序的调起协议中的query。如:

  1. // app.json
  2. {
  3. prefetches: [
  4. 'https://m.baidu.com?id=${id}'
  5. ]
  6. }

打开小程序的协议中,也需要携带此参数:

  1. pages/index/index?id=123

这样,再次使用request发起请求时,就可以利用上prefetches中的配置。

networkTimeout

各类网络请求的超时时间。

属性类型必填默认值说明
requestnumber60000swan.request 的超时时间,单位:毫秒。
connectSocketnumber60000swan.connectSocket 的超时时间,单位:毫秒。
uploadFilenumber60000swan.uploadFile 的超时时间,单位:毫秒。
downloadFilenumber60000swan.downloadFile 的超时时间,单位:毫秒。

代码示例

  1. "networkTimeout": {
  2. "request": 30000,
  3. "connectSocket": 10000,
  4. "uploadFile": 10000,
  5. "downloadFile": 10000
  6. }