uni-app 使用原生子窗体报错 未调用show就显示了
uni-app 使用原生子窗体报错 未调用show就显示了
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 11 | CLI |
| HBuilderX | 3.99 | |
| Android | 13 | |
| 小米 | 13 |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX版本号:3.99
手机系统:Android
手机系统版本号:Android 13
手机厂商:小米
手机机型:13
页面类型:nvue
vue版本:vue3
打包方式:云端
CLI版本号:3.9
示例代码:
pages.json配置
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#252429",
"backgroundColor": "#252429",
"navigationStyle": "custom",
"app-plus": {
"subNVues": [{
"id": "loading",
"path": "pages/subNVue/loading.nvue",
"type": "popup"
"style": {
// "position": "popup",
"background":"transparent"
}
}]
}
},
更多关于uni-app 使用原生子窗体报错 未调用show就显示了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
你好,问题有解决方案吗,我也遇到同样的问题
更多关于uni-app 使用原生子窗体报错 未调用show就显示了的实战教程也可以访问 https://www.itying.com/category-93-b0.html
同款问题
在 Uni-App 中,如果你使用原生子窗体(如 plus.nativeObj.View 或 plus.webview.Webview)时,遇到“未调用 show 就显示了”的错误,通常是因为子窗体的显示逻辑没有正确控制。以下是一些可能的原因和解决方法:
1. 检查子窗体的初始化与显示顺序
- 确保在调用
show方法之前,子窗体已经正确初始化。 - 如果你在子窗体初始化后立即显示它,可能会导致这种错误。可以尝试在初始化完成后,再调用
show方法。
let subView = new plus.nativeObj.View('subView', {
top: '0px',
left: '0px',
height: '100px',
width: '100px',
backgroundColor: '#FFFFFF'
});
// 确保在初始化完成后才调用 show
setTimeout(() => {
subView.show();
}, 100);
2. 避免多次初始化
- 如果你多次初始化同一个子窗体,可能会导致它被意外显示。确保子窗体只初始化一次。
if (!subView) {
subView = new plus.nativeObj.View('subView', {
top: '0px',
left: '0px',
height: '100px',
width: '100px',
backgroundColor: '#FFFFFF'
});
}
3. 检查子窗体的销毁
- 如果你在子窗体显示之前已经销毁了它,可能会导致未调用
show就显示的情况。确保在显示子窗体之前,它没有被销毁。
if (subView && !subView.isDestroyed()) {
subView.show();
}
4. 使用 setTimeout 延迟显示
- 有时候,子窗体的显示逻辑可能与其他操作冲突,导致它被意外显示。可以尝试使用
setTimeout延迟显示子窗体,以确保其他操作已经完成。
setTimeout(() => {
subView.show();
}, 500);
5. 检查子窗体的 zindex
- 如果子窗体的
zindex设置得比当前页面高,可能会导致它被意外显示。确保zindex设置正确,并且在需要显示时才调整它。
subView.setStyle({
zindex: 9999
});
subView.show();
6. 调试与日志
- 如果问题仍然存在,可以在代码中添加调试日志,检查子窗体的生命周期和显示逻辑,找出问题所在。
console.log('SubView initialized');
subView.show();
console.log('SubView shown');

