https://developers.weixin.qq.com/miniprogram/dev/api/launchApp.html?search-key=生命週期javascript
由於須要用戶主動觸發才能打開 APP,因此該功能不禁 API 來調用,須要用 open-type
的值設置爲 launchApp
的<button>
組件的點擊來觸發。html
當小程序從 APP 分享消息卡片的場景打開(場景值 1036,APP 分享小程序文檔 iOS 參見,Android 參見)或從 APP 打開的場景打開時(場景值 1069),小程序會得到打開 APP 的能力,此時用戶點擊按鈕能夠打開分享該卡片的 APP。即小程序不能打開任意 APP,只能 跳回
分享該小程序卡片的 APP。java
在一個小程序的生命週期內,只有在特定條件下,才具備打開 APP 的能力。 打開 APP 的能力
能夠理解爲由小程序框架在內部管理的一個狀態,爲 true 則能夠打開 APP,爲 false 則不能夠打開 APP。小程序
在小程序的生命週期內,這個狀態的初始值爲 false,以後會隨着小程序的每次打開(不管是啓動仍是切到前臺)而改變:api
https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/app.html?search-key=生命週期
Page({
launchAppError: function(e) { console.log(e.detail.errMsg) } })
App()
函數用來註冊一個小程序。接受一個 Object
參數,其指定小程序的生命週期回調等。微信
App() 必須在 app.js
中調用,必須調用且只能調用一次。否則會出現沒法預期的後果。app
Object參數說明:框架
屬性 | 類型 | 描述 | 觸發時機 |
---|---|---|---|
onLaunch | Function | 生命週期回調—監聽小程序初始化 | 小程序初始化完成時(全局只觸發一次) |
onShow | Function | 生命週期回調—監聽小程序顯示 | 小程序啓動,或從後臺進入前臺顯示時 |
onHide | Function | 生命週期回調—監聽小程序隱藏 | 小程序從前臺進入後臺時 |
onError | Function | 錯誤監聽函數 | 小程序發生腳本錯誤,或者 api 調用失敗時觸發,會帶上錯誤信息 |
onPageNotFound | Function | 頁面不存在監聽函數 | 小程序要打開的頁面不存在時觸發,會帶上頁面信息回調該函數 |
其餘 | Any | 開發者能夠添加任意的函數或數據到Object 參數中,用 this 能夠訪問 |
前臺、後臺定義: 當用戶點擊左上角關閉,或者按了設備 Home 鍵離開微信,小程序並無直接銷燬,而是進入了後臺;當再次進入微信或再次打開小程序,又會從後臺進入前臺。須要注意的是:只有當小程序進入後臺必定時間,或者系統資源佔用太高,纔會被真正的銷燬。異步
關閉小程序(基礎庫版本1.1.0開始支持): 當用戶從掃一掃、轉發等入口(場景值爲1007, 1008, 1011, 1025)進入小程序,且沒有置頂小程序的狀況下退出,小程序會被銷燬。ide
小程序運行機制在基礎庫版本 1.4.0 有所改變: 上一條關閉邏輯在新版本已不適用。詳情
示例代碼:
App({
onLaunch: function(options) { // Do something initial when launch. }, onShow: function(options) { // Do something when show. }, onHide: function() { // Do something when hide. }, onError: function(msg) { console.log(msg) }, globalData: 'I am global data' })
小程序初始化完成時觸發,全局只觸發一次。
Object 參數說明:
字段 | 類型 | 說明 |
---|---|---|
path | String | 打開小程序的路徑 |
query | Object | 打開小程序的query |
scene | Number | 打開小程序的場景值 |
shareTicket | String | shareTicket,詳見 獲取更多轉發信息 |
referrerInfo | Object | 當場景爲由從另外一個小程序或公衆號或App打開時,返回此字段 |
referrerInfo.appId | String | 來源小程序或公衆號或App的 appId,詳見下方說明 |
referrerInfo.extraData | Object | 來源小程序傳過來的數據,scene=1037或1038時支持 |
如下場景支持返回 referrerInfo.appId:
場景值 | 場景 | appId 信息含義 |
---|---|---|
1020 | 公衆號 profile 頁相關小程序列表 | 來源公衆號 appId |
1035 | 公衆號自定義菜單 | 來源公衆號 appId |
1036 | App 分享消息卡片 | 來源應用 appId |
1037 | 小程序打開小程序 | 來源小程序 appId |
1038 | 從另外一個小程序返回 | 來源小程序 appId |
1043 | 公衆號模板消息 | 來源公衆號 appId |
小程序啓動,或從後臺進入前臺顯示時觸發。
Object 參數說明:
與 onLaunch
一致
小程序從前臺進入後臺時觸發。
小程序發生腳本錯誤,或者 api 調用失敗時觸發。
參數說明
名稱 | 類型 | 說明 |
---|---|---|
error | String | 錯誤信息,包含堆棧 |
基礎庫 1.9.90 開始支持,低版本需作兼容處理。
小程序要打開的頁面不存在時觸發。
Object 參數說明:
字段 | 類型 | 說明 |
---|---|---|
path | String | 不存在頁面的路徑 |
query | Object | 打開不存在頁面的 query |
isEntryPage | Boolean | 是否本次啓動的首個頁面(例如從分享等入口進來,首個頁面是開發者配置的分享頁面) |
開發者能夠在 onPageNotFound
回調中進行重定向處理,但必須在回調中同步處理,異步處理(例如 setTimeout 異步執行)無效。
示例代碼:
App({
onPageNotFound(res) {
wx.redirectTo({
url: 'pages/...' }) // 若是是 tabbar 頁面,請使用 wx.switchTab } })
注意:
onPageNotFound
監聽,當跳轉頁面不存在時,將推入微信客戶端原生的頁面不存在提示頁面。onPageNotFound
回調中又重定向到另外一個不存在的頁面,將推入微信客戶端原生的頁面不存在提示頁面,而且再也不回調 onPageNotFound
。全局的 getApp()
函數能夠用來獲取到小程序 App
實例。
Object 參數說明:
字段 | 類型 | 說明 | 最低版本 |
---|---|---|---|
allowDefault | Boolean | 在 App 未定義時返回默認實現。當App被調用時,默認實現中定義的屬性會被覆蓋合併到App中。 |
2.2.4 |
示例代碼:
// other.js var appInstance = getApp() console.log(appInstance.globalData) // I am global data
注意:
App()
內的函數中調用 getApp()
,使用 this
就能夠拿到 app 實例。getApp()
獲取實例以後,不要私自調用生命週期函數。