diff --git a/lib/h5/main.js b/lib/h5/main.js index 6ed4beb6774e46ff6dde65350fa42b4685b9d179..6c844a43a58c7af42fcb523732a2237056b017b0 100644 --- a/lib/h5/main.js +++ b/lib/h5/main.js @@ -47,10 +47,6 @@ Vue.use(require('uni-view/plugins').default, { routes: __uniRoutes }) -Vue.config.errorHandler = function (err, vm, info) { - UniServiceJSBridge.emit('onError', err) -} - initVue(Vue) require('uni-platform/components') require('uni-components') diff --git a/packages/uni-app-plus/dist/index.v3.js b/packages/uni-app-plus/dist/index.v3.js index cbb9bfea2801112b135b27081b220c382eb030da..cb4c00c72f72ed08e6d1021b72fc3fce8433a3b7 100644 --- a/packages/uni-app-plus/dist/index.v3.js +++ b/packages/uni-app-plus/dist/index.v3.js @@ -12155,9 +12155,22 @@ var serviceContext = (function () { 'uni-web-view' ]; + function hasLifecycleHook (vueOptions = {}, hook) { + return Array.isArray(vueOptions[hook]) && vueOptions[hook].length + } + // 使用白名单过滤(前期有一批自定义组件使用了 uni-) - function initVue (Vue) { + function initVue (Vue) { + Vue.config.errorHandler = function (err) { + const app = getApp(); + if (app && hasLifecycleHook(app.$options, 'onError')) { + app.__call_hook('onError', err); + } else { + console.error(err); + } + }; + const oldIsReservedTag = Vue.config.isReservedTag; Vue.config.isReservedTag = function (tag) { @@ -12768,10 +12781,6 @@ var serviceContext = (function () { return key } - function hasLifecycleHook (vueOptions = {}, hook) { - return Array.isArray(vueOptions[hook]) && vueOptions[hook].length - } - /* @flow */ const LIFECYCLE_HOOKS = [ diff --git a/packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js b/packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js index 69ebf44f29b063c98a01a8618c63fea63a7dbd08..a1e787656a726fdf57312346936ccbf5d7760617 100644 --- a/packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js +++ b/packages/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js @@ -5808,8 +5808,14 @@ function getTarget(obj, path) { function internalMixin(Vue) { - Vue.config.errorHandler = function(err) { - console.error(err); + Vue.config.errorHandler = function(err) { + /* eslint-disable no-undef */ + var app = getApp(); + if (app && app.onError) { + app.onError(err); + } else { + console.error(err); + } }; var oldEmit = Vue.prototype.$emit; @@ -5832,14 +5838,14 @@ function internalMixin(Vue) { if (this.$scope && this.$scope[method]) { return this.$scope[method](args) } - // mp-alipay - if(typeof my === 'undefined'){ - return + // mp-alipay + if (typeof my === 'undefined') { + return } - if (method === 'createSelectorQuery') { + if (method === 'createSelectorQuery') { /* eslint-disable no-undef */ return my.createSelectorQuery(args) - } else if (method === 'createIntersectionObserver') { + } else if (method === 'createIntersectionObserver') { /* eslint-disable no-undef */ return my.createIntersectionObserver(args) } diff --git a/src/core/vue.js b/src/core/vue.js index 85b7303af90251b48b9d5532912b6a4f2c154e37..1a3b37f20b018a577dbf5561e359fddd64f2b398 100644 --- a/src/core/vue.js +++ b/src/core/vue.js @@ -1,7 +1,20 @@ // 使用白名单过滤(前期有一批自定义组件使用了 uni-) import tags from 'uni-helpers/tags' -export default function initVue (Vue) { +import { + hasLifecycleHook +} from 'uni-helpers/index' + +export default function initVue (Vue) { + Vue.config.errorHandler = function (err) { + const app = getApp() + if (app && hasLifecycleHook(app.$options, 'onError')) { + app.__call_hook('onError', err) + } else { + console.error(err) + } + } + const oldIsReservedTag = Vue.config.isReservedTag Vue.config.isReservedTag = function (tag) {