支付宝小程序modal和navigateBack 同时触发问题

场景

有两个页面分别为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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容