uni-app webview.setStyle({ }) 再次设置窗口样式时,会导致某些已经设置的样式丢失?

uni-app webview.setStyle({ }) 再次设置窗口样式时,会导致某些已经设置的样式丢失?

开发环境 版本号 项目创建方式
HBuilderX 3.2.3 云端

产品分类:HTML5+

手机系统:Android
手机系统版本号:Android 10
手机厂商:小米
手机机型:K30

### 示例代码:

```javascript
// 创建子窗口
subPage = plus.webview.create(url, id, {
zhData: {}, // 自定义webview数据
backButtonAutoControl: 'none',
top: plus.navigator.getStatusbarHeight() + 44 + 'px',
bottom: '0px',
progress: {
color: '#ffa000',
height: '1.5px'
},
bounce: 'all',
}, {});

=====================================================
后期过程:
if (subPage.getStyle().zhData.longtap) return;
subPage.setStyle({
zhData: {
longtap: true
}
});

操作步骤:

预期结果:

实际结果:

bug描述:

创建窗口时: { top: plus.navigator.getStatusbarHeight() + 44 + ‘px’, bottom: ‘0px’, progress: { color: ‘#ffa000’, height: ‘1.5px’ }, bounce: ‘all’, } 设置了进度条; 程序运行过程中再次调用 setStyle 方法,样式中不包含 progress,然后,进度条丢失。 不是应该不影响未声明设置的样式吗? 不知道这算不算 Bug?


更多关于uni-app webview.setStyle({ }) 再次设置窗口样式时,会导致某些已经设置的样式丢失?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app webview.setStyle({ }) 再次设置窗口样式时,会导致某些已经设置的样式丢失?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是 webview.setStyle() 方法的预期行为,不是 Bug。

问题原因: setStyle() 方法执行的是覆盖式更新,而非增量更新。当您调用 subPage.setStyle({ zhData: { longtap: true } }) 时,传入的对象 { zhData: { longtap: true } }完全替换掉之前通过 create 或上一次 setStyle 设置的样式对象。

这意味着,新的样式对象中未包含的原有属性(如 progresstopbottombounce 等)会被清除,恢复为系统默认值。

解决方案: 在后续调用 setStyle 时,必须采用合并策略,保留需要维持的原有样式。

修改您的后期代码为:

if (subPage.getStyle().zhData.longtap) return;
// 1. 先获取当前全部样式
let currentStyle = subPage.getStyle();
// 2. 创建需要更新的新样式对象,并合并(覆盖)原有数据
let newStyle = {
    ...currentStyle, // 保留所有现有样式
    zhData: {
        ...(currentStyle.zhData || {}), // 保留原有的zhData(如果有)
        longtap: true // 添加或覆盖longtap属性
    }
};
// 3. 设置合并后的完整样式
subPage.setStyle(newStyle);
回到顶部