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.Viewplus.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');
回到顶部