chameleon-api
chameleon-api copied to clipboard
fix: revert path decoding in interfaces/redirectTo
- 测试:babel-cli 应该加到 dev deps 不然测试无法运行、修复了三处测试运行中的错误
- 修复:https://github.com/chameleon-team/chameleon-api/commit/6c6d2f6bdc2e7ed530b4f293eb893e16f8629b1a 中错误将 path decode 了,这会导致参数丢失,撤销它的改动,并补充测试
问题
当前 cml.navigateTo API 会丢失参数,而使用 navigator 组件不会。
通常我们使用 webview 的时候会有自定义参数需要透传,像这样:
<navigator url="/pages/webview?url={{encodedUrl}}" />
<script>
Page({
data: {
encodedUrl: encodeURIComponent('https://www.example.com/?foo=1&bar=2'),
}
})
<script>
同时也可能会在需要回调中使用调用基础 API,像这样:
// 正常
const url = 'https://www.example.com/?foo=1&bar=2'
wx.navigateTo({url: `/webview?url=${encodeURIComponent(url)}`})
但如果在使用 cml 中则会丢失参数,因为它进行了一次多余的 decode:
const url = 'https://www.example.com/?foo=1&bar=2'
// 期望正常,但丢失了参数!
cml.navigateTo({path: `/webview?url=${encodeURIComponent(url)}`})
// 期望正常,但也丢失了参数!
cml.navigateTo({path: `/webview`, query: {url}})
框架问题非基础 API 问题
https://github.com/didi/chameleon/issues/387 中反映的问题是框架的,不是基础 API,经测试:
- 微信小程序
onLoad(query)
不会 decode(官网还有特别备注使用说明) - 百度小程序
onLoad(query)
会自动 decode
要解决它可以考虑在 cml 框架中解决,自动 decode 再注入参数(判断有必要的平台)。
额外想法
- 可以考虑把 mocha/chai 替换成 jest —— mocha 的测试没有隔离(每个文件会互相污染,特别是的全局环境变量),而 chai 的 API 又太繁琐不好用
- navigateTo({url}) 应该支持?习惯上 wx/swan 中是这样使用的,但 cml 中直接没有处理,直接丢弃了 —— 不然在使用一个 url 已经带参数的情况还可能需要想把它转换 path/query 格式