Chrome 106新版本拖拽元素导致页面渲染空白问题

背景:

用户将Chrome浏览器升级到106版本(截止20221010号的最新版本),发现原本的拖拽模块拖拽后页面空白。经验证同样问题发生在Edge上;

可稳定复现版本:

  • MAC Chrome:106.0.5249.103 (Official Build) (arm64)、 106.0.5249.103(正式版本) (x86_64)
  • WIN Edge:版本 106.0.5249.103(正式版本)(64 位)

问题描述:

使用js原生的 dragdrop方法写的拖拽组件,谷歌浏览器升级106版本之后,拖拽后页面空白。


原因分析:

Step1:开始查看是否为代码兼容问题,通过复查发现可视化配置模块的拖拽功能使用的是js原生的 dragdrop方法,暂且排除代码问题;
Step2:认为是谷歌浏览器版本问题所致,并尝试升级谷歌浏览器,后发现升级至106版本后可以稳定复现此问题(windows电脑自带的Edge浏览器也同样会出现该问题),并且未升级106版本的其他同学不会出现该问题;
Step3:开始寻找出现相似情况的文章(附在该文最后,有兴趣的同学可自行浏览关注后续~);因为系统内还存在同样有拖拽功能的其他模块,所以与此同时进行其他模块的检查,但其他拖拽功能使用的是 react-dnd,未受此次升级影响,于是查看该插件源码,看是否也是使用js的 dragdrop,以及为何不受影响;
Step4:尝试不同的解决方式。


解决方案:

  1. 谷歌浏览器升级至107beta版本,发现问题解决(由此可见106出现的问题不是代码兼容问题所致);
  2. react-dnd源码比较,发现它并未使用js的dragdrop,所以无法从此处下手解决问题,除非重写出现问题的模块,但工作量巨大,不现实;
  3. Chromium问题中记载了该问题的解决方案(参考链接1-Chromium的讨论):在拖拽元素的父元素中添加以下样式作为修复,亲测有效。
transform: translate(0, 0);
z-index: 0;
  1. 另外,Chromium在后面的v107正式版本会修复这个问题;

总结:

最后选择加上该样式在拖拽元素的div上,官方解决问题的答复中认为即便是不出现该错误也应该加上该样式,因为我们从最近的堆叠上下文中绘制拖动图像,并且如果可拖动元素不是堆叠上下文,则拖动图像可能包含包含堆叠上下文下的其他内容。


附录:

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值