鸿蒙Next ctx.measureText()方法在uni-app中跳转页面之后报错异常
鸿蒙Next ctx.measureText()方法在uni-app中跳转页面之后报错异常
类别 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC版本号 | win11 |
开发工具 | HBuilderX |
工具版本号 | 4.52 |
手机系统 | HarmonyOS NEXT |
手机版本号 | HarmonyOS NEXT Developer Beta2 |
手机厂商 | 华为 |
手机机型 | HarmonyOS 5.0.0 |
页面类型 | vue |
vue版本 | vue3 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
const ctx = uni.createCanvasContext('at-canvas');
console.log("createATImg------------11", ctx);
ctx.font = "italic bold 20px cursive";
const metrics = ctx.measureText("Hello World", (res) => {
console.log("createATImg------------22---ctx.measureText", res);
});
console.log("createATImg------------22---ctx.measureText1", metrics);
onLaunch: function() {
uni.redirectTo({
url: "/pages/index/index",
success: () => {},
fail: () => {}
});
}
操作步骤:
- 如果在app.vue里面,使用uni.redirectTo重新跳到这个页面,使用
ctx.measureText()
方法会报错 - 使用uni.switchTab跳到第一个tab页面,使用
ctx.measureText()
方法会报错 - 先使用uni.switchTab跳到第一个tab页面,在使用uni.navigateTo()跳转到下一个页面,使用
ctx.measureText()
方法会报错
预期结果:
在不同页面都可以正常获取
实际结果:
使用uni.redirectTo和uni.switchTab跳转页面之后,都报错
bug描述:
在使用 ctx.measureText()
方法,获取文本宽度时,空项目直接引用没问题,但是,跳转都会引发报错:
报错异常:Error: napi_call_function failed Error: webview 1 is not found.
更多关于鸿蒙Next ctx.measureText()方法在uni-app中跳转页面之后报错异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
遇到同样问题
更多关于鸿蒙Next ctx.measureText()方法在uni-app中跳转页面之后报错异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个在HarmonyOS NEXT环境下使用uni-app canvas API的兼容性问题。根据报错信息"webview 1 is not found",主要原因是页面跳转后canvas上下文失效导致的。
问题分析:
- 在HarmonyOS NEXT环境下,页面跳转(redirectTo/switchTab)会销毁当前webview
- 但之前创建的canvas上下文(ctx)仍然保留着对已销毁webview的引用
- 调用measureText时无法找到原始webview导致报错
解决方案:
- 在页面跳转前手动销毁canvas上下文:
ctx = null
- 或者在目标页面的onShow生命周期中重新创建canvas上下文:
onShow() {
this.ctx = uni.createCanvasContext('at-canvas')
}
- 也可以考虑使用setTimeout延迟measureText的调用,确保canvas完全加载:
setTimeout(() => {
const metrics = ctx.measureText("Hello World")
}, 100)