场景
有两个页面分别为A,B
A通过navigateTo跳转到B页面,并添加event回调,回调函数为onXXX
A页面跳转代码如下
Taro.navigateTo({
url: `/pages/bbbbb/index?${params}`,
events: {
onXXX : () => {
...
...
Taro.showModal({
title: '提示',
content: '测试',
success:() => {
.....
}
});
...
...
}
}
});
B页面通过emit激活传入的回调
B页面emit部分代码如下,找到对应的channel,emit发送消息,并返回上一页
const pages = Taro.getCurrentPages();
const current = pages[pages.length - 1];
const eventChannel = current.getOpenerEventChannel();
eventChannel?.emit('onXXX ', { a: '123123' });
Taro.navigateBack();
可以看到B页面的代码是想激活A页面传入的回调,并且回到A页面
问题
在IOS上可以看到弹窗弹出来后一闪而过,然后弹窗消失,onXXX可以触发,但是弹窗被吞了,导致showModal里的success回调因没有地方点击,无法触发
安卓上则正常回到A页面弹窗,正常展示,安卓15没有问题
解决
经排查,仅在ios上有此问题,需要延迟触发,改成如下方式即可
setTimeout(()=>{
eventChannel?.emit('onXXX ', { a: '123123' });
})
Taro.navigateBack();
额外注意点
经测试,在navigateTo的events里的函数,似乎是在B页面执行的,打印出的url都是B页面的
以下网上部分代码截图圈起来的部分,经支付宝小程序测试,似乎是错的,实际是在B页面执行的
image.png