61 lines
2.2 KiB
JavaScript
61 lines
2.2 KiB
JavaScript
var fakeWindow = {};var fakeDocument = {};(function(window, document) {})(fakeWindow, fakeDocument);var appConfig = fakeWindow.appOptions || {};
|
|
|
|
const LIFE_CYCLE_METHODS = ['onLaunch', 'onShow', 'onHide', 'onError', 'onPageNotFound', 'onUnhandledRejection', 'onThemeChange']
|
|
const extraConfig = {}
|
|
for (const key in appConfig) {
|
|
if (LIFE_CYCLE_METHODS.indexOf(key) === -1) extraConfig[key] = appConfig[key]
|
|
}
|
|
|
|
App({
|
|
onLaunch(options) {
|
|
if (appConfig.onLaunch) appConfig.onLaunch.call(this, options)
|
|
},
|
|
onShow(options) {
|
|
if (appConfig.onShow) appConfig.onShow.call(this, options)
|
|
},
|
|
onHide() {
|
|
if (appConfig.onHide) appConfig.onHide.call(this)
|
|
},
|
|
onError(err) {
|
|
// 支持 window 的 error 事件
|
|
const pages = getCurrentPages() || []
|
|
const currentPage = pages[pages.length - 1]
|
|
if (currentPage && currentPage.window) {
|
|
currentPage.window.$$trigger('error', {
|
|
event: err,
|
|
})
|
|
}
|
|
|
|
if (appConfig.onError) appConfig.onError.call(this, err)
|
|
},
|
|
onPageNotFound(options) {
|
|
if (appConfig.onPageNotFound) appConfig.onPageNotFound.call(this, options)
|
|
},
|
|
onUnhandledRejection(options) {
|
|
const pages = getCurrentPages() || []
|
|
const currentPage = pages[pages.length - 1]
|
|
if (currentPage && currentPage.window) {
|
|
const event = new currentPage.window.Event({
|
|
timeStamp: currentPage.window.performance.now(),
|
|
touches: [],
|
|
changedTouches: [],
|
|
name: 'unhandledrejection',
|
|
target: currentPage.window,
|
|
eventPhase: currentPage.window.Event.AT_TARGET,
|
|
$$extra: {
|
|
promise: options.promise,
|
|
reason: options.reason,
|
|
}
|
|
})
|
|
currentPage.window.$$trigger('unhandledrejection', {event})
|
|
}
|
|
|
|
if (appConfig.onUnhandledRejection) appConfig.onUnhandledRejection.call(this, options)
|
|
},
|
|
onThemeChange(options) {
|
|
if (appConfig.onThemeChange) appConfig.onThemeChange.call(this, options)
|
|
},
|
|
|
|
...extraConfig,
|
|
})
|