HarmonyOS harmony-hybrid监听hashchange后,调用Taro.navigateTo跳转没有触发hashchange回调

参考:

console.log('监听hashchange', window.location.href);
window.addEventListener('hashchange', (event) => {
  console.log('触发hashchange', event);
});
Taro.navigateTo({ url }); // 没有触发hashchange  // 注:调用Taro.navigateBack()可以正常触发hashchange
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

Taro.navigateTo不触发hashchange事件的原因是:Taro.navigateTo并没有改变URL的哈希值,而是直接使用了框架内部的路由机制来进行页面跳转。

因此,浏览器的hashchange事件不会被触发。

为了确保在调用Taro.navigateTo时也能够触发某种形式的回调,可以考虑以下几种方案:

1、使用Taro提供的生命周期方法:在目标页面的生命周期方法中处理逻辑,可以在目标页面的生命周期方法(如 onLoad 或 componentDidShow)中处理逻辑,而不是依赖 hashchange 事件。

例如:

// 在目标页面中
Page({
  onLoad(options) {
    console.log('目标页面加载', options);
    // 处理逻辑
  },
  onShow() {
    console.log('目标页面显示');
    // 处理逻辑
  }
});

2、手动触发事件:在调用Taro.navigateTo后,手动触发一个自定义事件,以便在hashchange的回调函数中处理逻辑。

// 添加全局事件监听器
window.addEventListener('customNavigate', (event) => {
  console.log('自定义导航事件', event);
});
// 自定义 navigateTo 方法
function customNavigateTo(url) {
  Taro.navigateTo({ url }).then(() => {
    const event = new CustomEvent('customNavigate', { detail: { url } });
    window.dispatchEvent(event);
  });
}
// 使用自定义 navigateTo 方法进行页面跳转
customNavigateTo('/pages/targetPage/index');
分享
微博
QQ
微信
回复
2天前
相关问题
支付成功没有收到
1794浏览 • 1回复 待解决
HarmonyOS 生命周期触发
87浏览 • 1回复 待解决
HarmonyOS Watch没有
42浏览 • 1回复 待解决
interface如何调用
959浏览 • 1回复 待解决
焦点事件onBlur/onFocus无法触发
2058浏览 • 1回复 待解决
HarmonyOS 位置权限变更监听问题
105浏览 • 1回复 待解决
HarmonyOS 属性动画怎么监听
324浏览 • 1回复 待解决
HarmonyOS @Watch方法没有改变
47浏览 • 1回复 待解决