From 8cb77614cfbe8cb969cd94c5c67bb35a31a6a350 Mon Sep 17 00:00:00 2001 From: liuxiaohang <283700113@qq.com> Date: Thu, 26 Aug 2021 21:28:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(mp-toutiao):=20=E4=BF=AE=E5=A4=8D=20?= =?UTF-8?q?=E5=AD=97=E8=8A=82=E5=B0=8F=E7=A8=8B=E5=BA=8F$emit=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=20fixed=20#2774?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/uni-mp-toutiao/dist/index.js | 258 ++++++++++++----------- src/platforms/mp-weixin/runtime/index.js | 8 +- 2 files changed, 138 insertions(+), 128 deletions(-) diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js index 32728fdbf..54dcb784d 100644 --- a/packages/uni-mp-toutiao/dist/index.js +++ b/packages/uni-mp-toutiao/dist/index.js @@ -1,5 +1,5 @@ -import Vue from 'vue'; - +import Vue from 'vue'; + function b64DecodeUnicode (str) { return decodeURIComponent(atob(str).split('').map(function (c) { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2) @@ -48,8 +48,8 @@ function uniIdMixin (Vue) { } = getCurrentUserInfo(); return tokenExpired > Date.now() }; -} - +} + const _toString = Object.prototype.toString; const hasOwnProperty = Object.prototype.hasOwnProperty; @@ -88,8 +88,8 @@ function cached (fn) { const camelizeRE = /-(\w)/g; const camelize = cached((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') -}); - +}); + const HOOKS = [ 'invoke', 'success', @@ -192,7 +192,7 @@ function queue (hooks, data) { } if (res === false) { return { - then () {} + then () { } } } } @@ -272,16 +272,20 @@ const promiseInterceptor = { if (!isPromise(res)) { return res } - return res.then(res => { - return res[1] - }).catch(res => { - return res[0] + return new Promise((resolve, reject) => { + res.then(res => { + if (res[0]) { + reject(res[0]); + } else { + resolve(res[1]); + } + }); }) } -}; - +}; + const SYNC_API_RE = - /^\$|Window$|WindowStyle$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/; + /^\$|Window$|WindowStyle$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getLocale|setLocale/; const CONTEXT_API_RE = /^create|Manager$/; @@ -350,8 +354,8 @@ function promisify (name, api) { }), ...params); }))) } -} - +} + const EPS = 1e-4; const BASE_DEVICE_WIDTH = 750; let isIOS = false; @@ -392,20 +396,20 @@ function upx2px (number, newDeviceWidth) { } } return number < 0 ? -result : result -} - +} + const interceptors = { promiseInterceptor -}; - -var baseApi = /*#__PURE__*/Object.freeze({ - __proto__: null, - upx2px: upx2px, - addInterceptor: addInterceptor, - removeInterceptor: removeInterceptor, - interceptors: interceptors -}); - +}; + +var baseApi = /*#__PURE__*/Object.freeze({ + __proto__: null, + upx2px: upx2px, + addInterceptor: addInterceptor, + removeInterceptor: removeInterceptor, + interceptors: interceptors +}); + class EventChannel { constructor (id, events) { this.id = id; @@ -472,8 +476,8 @@ class EventChannel { type }); } -} - +} + const eventChannels = {}; const eventChannelStack = []; @@ -509,8 +513,8 @@ var navigateTo = { returnValue (fromRes, toRes) { fromRes.eventChannel = getEventChannel(); } -}; - +}; + function findExistsPageIndex (url) { const pages = getCurrentPages(); let len = pages.length; @@ -521,8 +525,8 @@ function findExistsPageIndex (url) { } } return -1 -} - +} + var redirectTo = { name (fromArgs) { if (fromArgs.exists === 'back' && fromArgs.delta) { @@ -541,8 +545,8 @@ var redirectTo = { } } } -}; - +}; + var previewImage = { args (fromArgs) { let currentIndex = parseInt(fromArgs.current); @@ -575,8 +579,8 @@ var previewImage = { loop: false } } -}; - +}; + const UUID_KEY = '__DC_STAT_UUID'; let deviceId; function addUuid (result) { @@ -608,15 +612,15 @@ var getSystemInfo = { addUuid(result); addSafeAreaInsets(result); } -}; - +}; + const oName = 'getUserInfo'; const nName = 'getUserProfile'; var getUserProfile = { name: tt.canIUse(nName) ? nName : oName -}; - +}; + // 不支持的 API 列表 const todos = [ 'preloadPage', @@ -788,8 +792,8 @@ const protocols = { digestAlgorithm: false } } -}; - +}; + const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; function processCallback (methodName, method, returnValue) { @@ -874,8 +878,8 @@ function wrapper (methodName, method) { } } return method -} - +} + const todoApis = Object.create(null); const TODOS = [ @@ -902,15 +906,15 @@ function createTodoApi (name) { TODOS.forEach(function (name) { todoApis[name] = createTodoApi(name); -}); - +}); + var providers = { oauth: ['toutiao'], share: ['toutiao'], payment: ['toutiao'], push: ['toutiao'] -}; - +}; + function getProvider ({ service, success, @@ -932,18 +936,18 @@ function getProvider ({ isFn(fail) && fail(res); } isFn(complete) && complete(res); -} - -var extraApi = /*#__PURE__*/Object.freeze({ - __proto__: null, - getProvider: getProvider -}); - +} + +var extraApi = /*#__PURE__*/Object.freeze({ + __proto__: null, + getProvider: getProvider +}); + const getEmitter = (function () { let Emitter; - return function getUniEmitter () { - if (!Emitter) { - Emitter = new Vue(); + return function getUniEmitter () { + if (!Emitter) { + Emitter = new Vue(); } return Emitter } @@ -964,16 +968,16 @@ function $once () { } function $emit () { return apply(getEmitter(), '$emit', [...arguments]) -} - -var eventApi = /*#__PURE__*/Object.freeze({ - __proto__: null, - $on: $on, - $off: $off, - $once: $once, - $emit: $emit -}); - +} + +var eventApi = /*#__PURE__*/Object.freeze({ + __proto__: null, + $on: $on, + $off: $off, + $once: $once, + $emit: $emit +}); + function createMediaQueryObserver () { const mediaQueryObserver = {}; const { @@ -1064,13 +1068,13 @@ function createMediaQueryObserver () { }; return mediaQueryObserver -} - -var api = /*#__PURE__*/Object.freeze({ - __proto__: null, - createMediaQueryObserver: createMediaQueryObserver -}); - +} + +var api = /*#__PURE__*/Object.freeze({ + __proto__: null, + createMediaQueryObserver: createMediaQueryObserver +}); + const MPPage = Page; const MPComponent = Component; @@ -1088,8 +1092,10 @@ function initTriggerEvent (mpInstance) { } function initHook (name, options, isComponent) { - // fix by Lxh 字节自定义组件Component构造器文档上写有created,但是实测只触发了lifetimes上的created - isComponent && (options = options.lifetimes) + { + // fix by Lxh 字节自定义组件Component构造器文档上写有created,但是实测只触发了lifetimes上的created + isComponent && (options = options.lifetimes); + } const oldHook = options[name]; if (!oldHook) { options[name] = function () { @@ -1114,8 +1120,8 @@ if (!MPPage.__$wrappered) { initHook('created', options, true); return MPComponent(options) }; -} - +} + const PAGE_EVENT_HOOKS = [ 'onPullDownRefresh', 'onReachBottom', @@ -1657,8 +1663,8 @@ function handleEvent (event) { ) { return ret[0] } -} - +} + const hooks = [ 'onShow', 'onHide', @@ -1818,8 +1824,8 @@ function parseBaseApp (vm, { initHooks(appOptions, hooks); return appOptions -} - +} + function findVmByVueId (vm, vuePid) { const $children = vm.$children; // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200) @@ -1860,8 +1866,8 @@ function handleLink (event) { } vueOptions.parent = parentVm; -} - +} + const mocks = ['__route__', '__webviewId__', '__nodeid__', '__nodeId__']; function isPage () { @@ -1961,8 +1967,8 @@ function handleLink$1 ({ vm._isMounted = true; vm.__call_hook('mounted'); vm.__call_hook('onReady'); -} - +} + function parseApp (vm) { Vue.prototype._$fallback = true; // 降级(调整原 vue 的部分生命周期,如 created,beforeMount,inject,provide) @@ -1989,13 +1995,13 @@ function parseApp (vm) { mocks, initRefs: function () {} // attached 时,可能查询不到 }) -} - +} + function createApp (vm) { App(parseApp(vm)); return vm -} - +} + const encodeReserveRE = /[!'()*]/g; const encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16); const commaRE = /%2C/g; @@ -2037,8 +2043,8 @@ function stringifyQuery (obj, encodeStr = encode) { return encodeStr(key) + '=' + encodeStr(val) }).filter(x => x.length > 0).join('&') : null; return res ? `?${res}` : '' -} - +} + function parseBaseComponent (vueComponentOptions, { isPage, initRelation @@ -2129,8 +2135,8 @@ function parseBaseComponent (vueComponentOptions, { return componentOptions } return [componentOptions, VueComponent] -} - +} + const components = []; function parseComponent (vueOptions) { @@ -2183,8 +2189,8 @@ function parseComponent (vueOptions) { componentOptions.methods.__l = handleLink$1; return componentOptions -} - +} + const hooks$1 = [ 'onShow', 'onHide', @@ -2213,8 +2219,8 @@ function parseBasePage (vuePageOptions, { }; return pageOptions -} - +} + function parsePage (vuePageOptions) { const pageOptions = parseBasePage(vuePageOptions, { isPage, @@ -2231,34 +2237,34 @@ function parsePage (vuePageOptions) { } else { this.is && console.warn(this.is + ' is not ready'); } - }; - - pageOptions.lifetimes.detached = function detached () { - this.$vm && this.$vm.$destroy(); - // 清理 - const webviewId = this.__webviewId__; - webviewId && Object.keys(instances).forEach(key => { - if (key.indexOf(webviewId + '_') === 0) { - delete instances[key]; - } - }); + }; + + pageOptions.lifetimes.detached = function detached () { + this.$vm && this.$vm.$destroy(); + // 清理 + const webviewId = this.__webviewId__; + webviewId && Object.keys(instances).forEach(key => { + if (key.indexOf(webviewId + '_') === 0) { + delete instances[key]; + } + }); }; return pageOptions -} - +} + function createPage (vuePageOptions) { { return Component(parsePage(vuePageOptions)) } -} - +} + function createComponent (vueOptions) { { return Component(parseComponent(vueOptions)) } -} - +} + function createSubpackageApp (vm) { const appOptions = parseApp(vm); const app = getApp({ @@ -2293,8 +2299,8 @@ function createSubpackageApp (vm) { vm.__call_hook('onLaunch', args); } return vm -} - +} + function createPlugin (vm) { const appOptions = parseApp(vm); if (isFn(appOptions.onShow) && tt.onAppShow) { @@ -2312,8 +2318,8 @@ function createPlugin (vm) { appOptions.onLaunch.call(vm, args); } return vm -} - +} + todos.forEach(todoApi => { protocols[todoApi] = false; }); @@ -2396,7 +2402,7 @@ tt.createComponent = createComponent; tt.createSubpackageApp = createSubpackageApp; tt.createPlugin = createPlugin; -var uni$1 = uni; - -export default uni$1; -export { createApp, createComponent, createPage, createPlugin, createSubpackageApp }; +var uni$1 = uni; + +export default uni$1; +export { createApp, createComponent, createPage, createPlugin, createSubpackageApp }; diff --git a/src/platforms/mp-weixin/runtime/index.js b/src/platforms/mp-weixin/runtime/index.js index 2e3a1fc71..d35d55cf1 100644 --- a/src/platforms/mp-weixin/runtime/index.js +++ b/src/platforms/mp-weixin/runtime/index.js @@ -24,7 +24,11 @@ function initTriggerEvent (mpInstance) { } } -function initHook (name, options) { +function initHook (name, options, isComponent) { + if (__PLATFORM__ === 'mp-toutiao') { + // fix by Lxh 字节自定义组件Component构造器文档上写有created,但是实测只触发了lifetimes上的created + isComponent && (options = options.lifetimes) + } const oldHook = options[name] if (!oldHook) { options[name] = function () { @@ -46,7 +50,7 @@ if (!MPPage.__$wrappered) { Page.after = MPPage.after Component = function (options = {}) { - initHook('created', options) + initHook('created', options, true) return MPComponent(options) } } -- GitLab