#8530·capacitor

SystemBars: 安全区域 CSS 注入在启动时抛出"无法读取空的属性"错误(Android 16)

作者: ckrishn创建于 2026年7月13日更新于 2026年9月9日
标签triage

QQ 电容版本

在升级到Capacitor 8并瞄准SDK 36. 每个应用程序发布日志 :

E Capacitor/ Console: 文件: - 第6行 - Msg: 插入安全区域出错 CSS: TypeError: 无法读取无效属性(读取"样式")

环境: @concessor/android 8.4.1,编译Sdk/targetSdk 36,AGP 8.13.0,Gradle 8.14.3,JDK 21,三星设备在Android 16.

□ 发生什么了?

其出自"SystemBars.injectSafereaCSS ()"(~8.4.1中的250行). 注入的脚本是:

贾瓦 "" "" "" 尝试{ 文档. documentElement.style.set Property ("--seafe-rea-inset-top"),"%dpx"; 文档. documentElement.style.set Property ("-- safe-rea- inset-right"), “%dpx" ; 文档. document Element.style.set Property ("-- safe-rea- inset-bottom"),"%dpx"; 文档。文档Element.style.set Property ("--seafe-rea-inset-left"),"%dpx"; }接住(e){控制台.error('错误地注射安全区CSS:',e;} "" "" ""


`文件.文件Element'在运行时无效。 logcat输出中的"行6"是文本块内的接线,该接线被排出.

据我所知,`注射安全区CSS ' 是从`setOnApply Window Insets listener ' 召回的,在WebView文件出现之前,第一个版式就是火。 'bridge.getWebView ()!=无"卫视通过——有WebView对象——但其中还没有文件. 后来工作顺利,这就是为什么CSS变量最终会正确设置,没有明显中断。

∮为什么我不能随心所欲∮

尝试了'insetsHandling:"残疾"的第一,这是一个错误——在Android 16 SystemBars上,是唯一真正在状态栏下设定内容的东西. `Status Bar.setOverlaysWebView()'使用`SetSystemUivisibility',这是API 35+的禁用. 因此,取消插件以杀死错误的功能会打破插件提供的布局. 最终补补了框架, 这并不是伟大的必须携带。

□ 修补

插入的脚本中未加保护 :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么?
尝试{
如果(文档。文档Element){
文档. documentElement.style.set Property ("--seafe-rea-inset-top"),"%dpx";
/.etc (中文(简体) ).
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
}接住(e){控制台.error('错误地注射安全区CSS:',e;}

当DOM已经存在时,不能改变行为 在物理Android 16设备上运行此功能——出错已去,布局相同,没有其他控制台出错.

□ 重现

第8.4.1分节 Android app,目标Sdk 36,"viewport-fit=cover"在取景地元中,在Android 16设备上发射,监视控制台.

如果想要公关,我很高兴

其他 API 细节

贝壳


受影响的平台

- [ ]iOS系统
- [x] 机器人
- [ ] 网络

### 当前的行为

每次应用程序发布时,一个错误会被登录到控制台:

插入安全区域出错 CSS: TypeError: 无法读取无效属性( 读取' style' )

完整对数线 :
E Capacitor/ Console: 文件: - 第6行 - Msg: 插入安全区域出错 CSS: TypeError: 无法读取无效属性(读取"样式")

它来自SystemBars.injectSafereaCSS (). 注射时
. . . . . . .

内容来源: ionic-team/capacitor