HarmonyOS鸿蒙Next中点击js卡片,如何通过message打开指定的js页面

HarmonyOS鸿蒙Next中点击js卡片,如何通过message打开指定的js页面 我们都知道,js卡片点击有两种模式,一种是通过router 的形式跳转到指定的ability, 另外一种是通过messge的形式给ability的 onTriggerFormEvent监听事件传递消息。

点击卡片大部分情况是为了打开指定的页面。

目前已知的方式是用router 的形式,在onStart 中通过 setInstanceName 来跳转到指定实例的URL上,在instance 的生命周期中获取参数渲染页面。但是这种方法有个弊端,在onStar已经开启的情况下,点击卡片实例无法获取到参数。

另外一种是把信息传递通过message传递给onTriggerFormEvent中,请问这里可以通过什么方式跳转到js么?


更多关于HarmonyOS鸿蒙Next中点击js卡片,如何通过message打开指定的js页面的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

将卡片跳转的ability设置为单例,此时卡片启动页面,都会走onNewIntent,这里获取参数就可以了

更多关于HarmonyOS鸿蒙Next中点击js卡片,如何通过message打开指定的js页面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以的,感谢!

再多问一下,单例和多例还有哪些区别呢,

参考如下官方说法
目前HarmonyOS只支持三种启动模式,即launchType标签,该标签标识ability的启动模式,标签值可选 “singleton”、“singleMission"以及"standard”。该标签可缺省,缺省值为standard 。

  • singleton表示此ability在所有任务栈里单实例。
  • singleMission表示此ability在单个任务栈里单实例。
  • standard表示此ability可以有多实例。

如果formEnabled为true,则ability启动模式的标签值只支持singleton。如果要想只有一个Ability实例,在内存中可以将launchType标签设置为:singleton

在HarmonyOS鸿蒙Next中,通过message打开指定的JS页面,可以使用router模块进行页面跳转。首先,确保在config.json中配置了目标页面的路由信息。然后,在JS卡片的事件处理函数中,使用router.pushrouter.replace方法进行页面导航。

例如,假设目标页面的路由为"pages/targetPage",可以在点击事件中编写如下代码:

import router from '@ohos.router';

function onCardClick() {
    router.push({
        uri: 'pages/targetPage'
    });
}

config.json中,确保目标页面的路由已正确配置:

{
  "pages": [
    "pages/index",
    "pages/targetPage"
  ]
}

通过这种方式,点击JS卡片时,系统会导航到指定的JS页面。

在HarmonyOS鸿蒙Next中,通过点击JS卡片打开指定JS页面,可以使用postMessage方法传递消息。首先,在JS卡片中定义点击事件,通过postMessage发送包含目标页面路径的消息。然后在主页面监听message事件,解析消息内容并导航到指定页面。示例代码如下:

// JS卡片中
card.onclick = () => {
  card.postMessage({ path: 'pages/targetPage' });
};

// 主页面中
window.addEventListener('message', (event) => {
  const { path } = event.data;
  if (path) {
    window.location.href = path;
  }
});

确保目标页面路径正确,并在主页面中处理消息以实现页面跳转。

回到顶部