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
更多关于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 设置的样式对象。
这意味着,新的样式对象中未包含的原有属性(如 progress、top、bottom、bounce 等)会被清除,恢复为系统默认值。
解决方案:
在后续调用 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);

