当前位置:首页 > 技术分析 > 正文内容

解决ios15系统的手机使用html2canvas截图页面空白崩溃

ruisui882个月前 (02-25)技术分析12

最近ios15系统推出了,公司的app开始测试ios15的兼容,然后就出现了有截图的页面卡顿白屏的问题。

业务场景是这样,我们的每个页面都会有多个截图,截图使用的方式是html2canvas这个插件,

1、截图方法如下:

// 截图方法
 function convertToPoster() {
   var $poster = $('#poster-content');
   html2canvas($poster[0], {useCORS: true})
     .then(
     function (canvas) {
       var oImage = new Image();
       oImage.src = canvas.toDataURL('image/png', 1);
       $(oImage)
         .addClass('poster');
       $poster.parent()
         .after(oImage)
         .hide();
     }
   );
 };

2、调用方法如下:

$(window).load(function() {
  convertToPoster();
})

3、问题现象:

当页面先截一张图之后,再去截第二张图时,页面就会出现卡顿白屏的问题,这个问题时必现,且在ios的浏览器中走也是这样。

4、解决方案:

经过很多轮的调试之后,依然找不出原因,因为既无报错也不确定页面是在哪行代码卡住的,最终只能采用笨办法,去屏蔽页面的html结构,只留下两个截图的结构,突然好运降临,页面不卡了,截图成功了,那是不是就能证明是页面的某个dom结构导致的呢?

因为页面较为复杂,最终经过10多轮的屏蔽组合,终于确定在了button这里,那么这个button按钮的样式会有什么影响呢?

一步一步挨个去屏蔽属性,结果并没有预料中的变好,正在疑惑之时,突然看到了用户代理样式里面有三个属性是没有替换的,其中有个font-family:system-ui这个样式在chrome浏览器中是没有的,会不会是这个影响的呢?果然屏蔽了它之后就可以了,页面操作无比丝滑。

我们先来看看这个样式究竟是什么意思?

system-ui是一种通用字体系列,它选择当前操作系统下的默认系统字体,它的优势在于和当前系统使用的字体相匹配,可以让Web页面和App风格看起来更统一。

话说它虽然出现得比较晚,但是在can i use上显示的兼容性还是很好的,为啥会出现在ios15的手机系统上呢?目前ios15的资料还少之又少查不到,有待于深究。

记录下目前的处理方案:

//兼容ios15手机系统字体导致的问题
var isiOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if (isiOS) {
  var ios_ver = parseInt(navigator.userAgent.toLowerCase().match(/cpu iphone os (.*?) like mac os/)[1].replace(/\_/g, '.'));
  if (ios_ver >= 15) {
    if ($('button')) {
      $('button').css('font-family', 'PingFangSC-Regular');
    }
  }
}

版权声明

本文为[青咕咕]所创,转载请带上原文链接,感谢

https://juejin.im/post/7006119499216715783



扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2228.html

分享给朋友:

“解决ios15系统的手机使用html2canvas截图页面空白崩溃” 的相关文章

代码管理-9-gitlab的使用和设置

gitlab使用1、外观设置完成后保存,返回登录页面查看关于注册,有些公司是不允许打开的,,有些人数非常多的公司就需要打开注册的功能,让人员自己注册,我们来给他特定的权限就可以,毕竟人非常多的时候还由我们来给她们注册就非常不现实了,工作量会很大2、自动注册3、组&用户&项目创建组设置组名称、描述等创...

继Yuzu后,任天堂要求移除多个Switch模拟器项目

IT之家 7 月 11 日消息,任天堂美国分公司 (Nintendo of America) 已要求移除多个用于模拟 Nintendo Switch 游戏的开源模拟器项目,其中包括 Suyu、Nzu、Uzuy、Torzu、Sudachi 和 Yuzu-vanced 等。这些模拟器均被指控包含绕过任天...

迁移GIT仓库并带有历史提交记录

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。// 先用--bare克隆裸仓库 git clone git@gitee.com:xxx/testApp...

软件测试-性能测试专题方法与经验总结

本文 从 性能测试流程,性能测试指标,性能监测工具,性能测试工具,性能测试基线,性能测试策略,性能瓶颈分析方法几个维度,进行知识总结和经验分享;详细见下图总结,欢迎大家补充;性能测试经验与思考1. 性能测试流程1.1. 性格规格评审1.2. 资源排期1.2.1. 人力资源1.2.2. 时间计划· 性...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockershim。在V1.24起的版本的kubelet就彻底移除了dockershim,改为默认使用Conta...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...