uni-app getCurrentPages()函数在鸿蒙next真机上存在兼容问题,获取到的是个空数组
uni-app getCurrentPages()函数在鸿蒙next真机上存在兼容问题,获取到的是个空数组
示例代码:
const height = systemInfo.value.windowWidth; // 定义动态的高度变量
const statusbarHeight = systemInfo.value.statusBarHeight; // 动态状态栏高度
const pages = getCurrentPages();
const page: any = pages[pages.length - 1];
const currentWebview = page.$getAppWebview();
setTimeout(() => {
const wv = currentWebview.children()[0];
wv.setStyle({
top: statusbarHeight + 44,
height: height - statusbarHeight - 136,
});
}, 200);
操作步骤:
在webview中加载一个pdf文件,调用以上代码去动态修改webview页面高度,为导航栏和底部按钮腾出位置的操作就可以复现问题了。
预期结果:
希望getCurrentPages
函数以及内置子函数功能与ios和安卓端保持一致
实际结果:
getCurrentPages
在鸿蒙next上不兼容
bug描述:
代码如上,通过getCurrentPages()
在鸿蒙next真机上获取当前页面栈实例获取到的数据跟安卓(ios)是存在差异的,返回的不是页面栈数组,导致webview页面中无法调用$getAppWebview()
去动态修改webview页面的top和height属性
| 信息类别 | 信息内容 |
|------------------|------------------------------------------------------------|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC开发环境版本号 | 版本:Windows 10 专业版;版本号:21H2;操作系统内部版本号:19044.3086 |
| 手机系统 | HarmonyOS NEXT |
| 手机系统版本号 | HarmonyOS NEXT Developer Beta2 |
| 手机厂商 | 华为 |
| 手机机型 | HUAWEI Mate 60(软件版本:NEXT.0.0.71(SP6C00E71R4P17patch02)) |
| 页面类型 | vue |
| vue版本 | vue3 |
| 打包方式 | 云端 |
| 项目创建方式 | CLI |
| CLI版本号 | 4.29 |
| nvue编译模式 | fast |
更多关于uni-app getCurrentPages()函数在鸿蒙next真机上存在兼容问题,获取到的是个空数组的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这个需求能用webview组件实现吗?目前没有计划支持$getAppWebview
更多关于uni-app getCurrentPages()函数在鸿蒙next真机上存在兼容问题,获取到的是个空数组的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
求解决求解决!!!!
针对您提到的uni-app中getCurrentPages()
函数在鸿蒙next真机上存在兼容问题,获取到的是个空数组的情况,这确实是一个比较棘手的问题,因为getCurrentPages()
是uni-app框架提供的一个API,用于获取当前页面栈的实例数组,这在多页面跳转和状态管理中非常有用。不过,由于不同平台的差异,确实可能出现兼容性问题。
在无法直接修改uni-app框架源码或等待官方修复的情况下,我们可以通过一些替代方案或者工作区来绕过这个问题。以下是一个可能的解决方案,它使用了Vuex(或类似的状态管理库)来手动管理页面栈,而不是依赖getCurrentPages()
。
使用Vuex管理页面栈
首先,确保您的项目中已经安装了Vuex。然后,在store中定义一个模块来管理页面栈。
// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
pagesStack: []
},
mutations: {
PUSH_PAGE(state, page) {
state.pagesStack.push(page);
},
POP_PAGE(state) {
state.pagesStack.pop();
}
},
actions: {
pushPage({ commit }, page) {
commit('PUSH_PAGE', page);
},
popPage({ commit }) {
commit('POP_PAGE');
}
}
});
在页面组件中使用Vuex管理页面栈
在每个页面的onShow
和onHide
(或beforeDestroy
)生命周期钩子中,调用Vuex的action来更新页面栈。
// 在每个页面的script部分
export default {
onShow() {
this.$store.dispatch('pushPage', this);
},
onHide() {
this.$store.dispatch('popPage');
}
};
注意事项
- 性能考虑:手动管理页面栈可能会增加一些额外的开销,尤其是在页面切换频繁的应用中。
- 页面引用:确保在
pushPage
和popPage
中传递的是页面的正确引用,以便后续可以通过页面栈访问到这些页面实例。 - 平台差异:虽然这种方法可以在一定程度上绕过
getCurrentPages()
的兼容性问题,但仍然需要注意其他平台差异。
通过上述方法,我们可以在不依赖getCurrentPages()
的情况下,手动维护一个页面栈,从而在鸿蒙next真机上实现类似的功能。