From 5d1c7dc479c886bd6ca9d5fb09751c7831aeb655 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 12 May 2020 15:56:55 +0800 Subject: [PATCH] fix(v3): decode query (onLoad) --- src/core/service/plugins/page/index.js | 19 +++++-------------- .../service/framework/plugins/lifecycle.js | 6 ++++-- src/shared/query.js | 12 ++++++++++++ 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/core/service/plugins/page/index.js b/src/core/service/plugins/page/index.js index 19ea00761..482419d9b 100644 --- a/src/core/service/plugins/page/index.js +++ b/src/core/service/plugins/page/index.js @@ -1,26 +1,17 @@ +import { + decodedQuery +} from 'uni-shared' + import { callPageHook } from '../util' import createPage from './create-page' -// 与小程序保持一致,尝试decodeURIComponent一次参数 -function getDecodedQuery (query = {}) { - const decodedQuery = {} - Object.keys(query).forEach(name => { - try { - decodedQuery[name] = decodeURIComponent(query[name]) - } catch (e) { - decodedQuery[name] = query[name] - } - }) - return decodedQuery -} - export function createPageMixin () { return { created: function pageCreated () { - const options = getDecodedQuery(this.$route.query) + const options = decodedQuery(this.$route.query) createPage(this, options) callPageHook(this, 'onLoad', options) callPageHook(this, 'onShow') diff --git a/src/platforms/app-plus/service/framework/plugins/lifecycle.js b/src/platforms/app-plus/service/framework/plugins/lifecycle.js index 604fa4276..40f38fe97 100644 --- a/src/platforms/app-plus/service/framework/plugins/lifecycle.js +++ b/src/platforms/app-plus/service/framework/plugins/lifecycle.js @@ -1,5 +1,6 @@ import { - hasOwn + hasOwn, + decodedQuery } from 'uni-shared' import { @@ -86,7 +87,8 @@ export function initLifecycle (Vue) { }, created () { if (this.mpType === 'page') { - callPageHook(this.$scope, 'onLoad', this.$options.pageQuery) + // 理论上应该从最开始的 parseQuery 的地方直接 decode 两次,为了减少影响范围,先仅处理 onLoad 参数 + callPageHook(this.$scope, 'onLoad', decodedQuery(this.$options.pageQuery)) callPageHook(this.$scope, 'onShow') } }, diff --git a/src/shared/query.js b/src/shared/query.js index db0865c63..7203db996 100644 --- a/src/shared/query.js +++ b/src/shared/query.js @@ -69,4 +69,16 @@ export function stringifyQuery (obj, encodeStr = encode) { return encodeStr(key) + '=' + encodeStr(val) }).filter(x => x.length > 0).join('&') : null return res ? `?${res}` : '' +} + +export function decodedQuery (query = {}) { + const decodedQuery = {} + Object.keys(query).forEach(name => { + try { + decodedQuery[name] = decode(query[name]) + } catch (e) { + decodedQuery[name] = query[name] + } + }) + return decodedQuery } -- GitLab