发现问题

今天有客户向我们反馈了一个BUG:一个页面在IE、FireFox、Chrome52中能正常运行,但是在最新版的Chrome53中显示不了???

习惯性的,我们需要客户提供页面在浏览器中的HTML源代码,客户居然告诉我们说:右键打不开!!!

这就怪了,莫非写的代码导致死循环了,然后浏览器崩溃了........

首先和客户确认运行环境:

  1. 使用了最新版的FineUIPro v3.2.0.4
  2. 使用了最新版的Chrome 53.0.2785 稳定版

一切看似都是最新的,然后我们让客户在IE浏览器下取到页面的HTML源代码,开始调试

分析问题

拿到页面的HTML源代码,我们在相同的Chrome53中测试,的确浏览器卡死了。

我们的第一反应就是代码中存在死循环,但是奇怪的是为啥Chrome52没有问题呢?不管他,先调试再说

最后,代码跟踪到这里地方:

其实这就是jQuery的一个DOM节点的插入操作,但是执行完这条语句后,浏览器就卡死,没反应了。

这个代码的简化示例代码如下:

$('<div></div>').appendTo('body');

其实就是对 jQuery 的 appendTo 方法的调用,这让我们的焦点转向了 jQuery,莫非是 jQuery 对 Chrome 53 不兼容?

如果存在这么严重的问题,网络上应该早就有人遇到了。但实际上没有一个人提出类似的问题,并且我们使用的 jQuery 也是最新版:v1.12.4

为了避免 FineUIPro 的客户端 JavaScript 的影响,我们把 me._fjs_el DOM 节点的内容单独拿出来,在页面上执行:

$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div id="Panel7_Toolbar1" class="f-toolbar f-toolbar-align-left f-panel-toolbar-top ui-widget-content f-cmp ui-widget" style="display: block;"></div>'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'<div id="fineui_0" class="f-panel ui-widget-content f-panel-border f-cmp ui-widget f-layout-vbox-item" style="margin: 5px; display: block;"></div>'+
'</div>'+
'</div>').appendTo('body')

结果是,执行完这段代码后,浏览器直接卡死:

此时,我们来到 CPU 的占用居高不下:

莫非,是 DOM 节点有问题,比如少了闭合标签之类的,导致Chrome53解析出的问题??

仔细检查后,我们确认了 DOM 节点一切正常!!

好吧,那就来折半分析问题,先删除一部分代码,发现如下两段删除了一个 DIV 节点的代码都能正常运行:

$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div id="Panel7_Toolbar1" class="f-toolbar f-toolbar-align-left f-panel-toolbar-top ui-widget-content f-cmp ui-widget" style="display: block;"></div>'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'</div>'+
'</div>').appendTo('body')
$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'<div id="fineui_0" class="f-panel ui-widget-content f-panel-border f-cmp ui-widget f-layout-vbox-item" style="margin: 5px; display: block;"></div>'+
'</div>'+
'</div>').appendTo('body')

无厘头,本身删除的 DIV 节点都没有任何问题。更无厘头的事情时,经过好多次尝试,我们发现把原始HTML代码中 class 属性改个字符就能正常运行了:

$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div id="Panel7_Toolbar1" class="f-toolbar f-toolbar-align-left f-panel-toolbar-top ui-widget-content f-cmp ui-widget" style="display: block;"></div>'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'<div id="fineui_0" class="f-panel ui-widget-content f-panel-border f-cmp ui-widget f-layout-vbox-iter" style="margin: 5px; display: block;"></div>'+
'</div>'+
'</div>').appendTo('body')

好吧!这还有啥好说的,这是Chrome53本身的BUG无疑!

小结:上面的代码可复现,如果你不信,可以自己试下。

首先随便找到一个引用了 jQuery 的页面,如果不好找,可以用我们产品的示例页面:http://fineui.com/demo_pro/

打开 Chrome53, F12 打开调试窗口,执行如下代码:

$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div id="Panel7_Toolbar1" class="f-toolbar f-toolbar-align-left f-panel-toolbar-top ui-widget-content f-cmp ui-widget" style="display: block;"></div>'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'<div id="fineui_0" class="f-panel ui-widget-content f-panel-border f-cmp ui-widget f-layout-vbox-item" style="margin: 5px; display: block;"></div>'+
'</div>'+
'</div>').appendTo('body')

浏览器卡死!!!

然后,重新启动 Chrome53,执行如下代码:

$('<div id="Panel7" class="f-panel f-panel-viewport f-cmp ui-widget" style="margin: 5px; display: block;">'+
'<div id="Panel7_Toolbar1" class="f-toolbar f-toolbar-align-left f-panel-toolbar-top ui-widget-content f-cmp ui-widget" style="display: block;"></div>'+
'<div class="f-panel-body" style="padding: 0px; overflow: auto;">'+
'<div id="fineui_0" class="f-panel ui-widget-content f-panel-border f-cmp ui-widget f-layout-vbox-iten" style="margin: 5px; display: block;"></div>'+
'</div>'+
'</div>').appendTo('body')

浏览器正常运行!!

解决问题

既然是 Chrome53 的BUG,就等 Chrome官方出更新版本吧....

刚下载的最新版:53.0.2785.116 仍然可重现这个问题,有兴趣的同学可以自己试下(由于google官网无法访问,可以方便的通过baidu下载)。

【更新@2016-10-08 15:20】

==========================

多谢网友 @momo314  和  @也许你面容憔悴 的提醒,经测试:v53.0.2785.113 和 v53.0.2785.116 存在BUG,v53.0.2785.143 版本解决了这个问题

同时提醒正在使用 v53.0.2785.113 和 v53.0.2785.116(2016-09-15发布) 的网友,尽快升级到最新稳定版:v53.0.2785.143(2016-09-30发布!)

根据网友的反馈,开发版 Chrome v54 依然存在此BUG,而 Chrome 55 工作正常。

希望Chrome版本帝以后发稳定版时多注意,不要在新版本中引入这个问题了........

【已更新】【原创】Chrome53 最新版惊现无厘头卡死 BUG!的更多相关文章

  1. 【原创】IE11惊现无厘头Crash BUG(三招搞死你的IE11,并提供可重现代码)!

    前言 很多人都知道我们在做FineUI控件库,而且我们也做了超过 9 年的时间,在和浏览器无数次的交往中,也发现了多个浏览器自身的BUG,并公开出来方便大家查阅: 分享IE7一个神奇的BUG(不是封闭 ...

  2. 【有意思的BUG】客户端无厘头 已连网的场景初始化太慢 未连网的场景异常崩溃

    客户端 已连网的场景初始化太慢 当在未连接internet的时候,打开某些APP,会比较迅速地初始化进入到主页面. 但是当我在已经连接了internet的时候,打开某些APP,有些会初始化很久!!!! ...

  3. [原创]反汇编之一:和Taskmgr过不去篇(无厘头版)

    原文链接:和Taskmgr过不去篇(无厘头版) Hook入门级文章,主要想培养一下偶写文章的感觉,老鸟无视…我想看看技术文章能不能无厘头的写,如果效果不错的话,准备更上一层-----用我的原创漫画表达 ...

  4. 【知识整理】惊现RecyclerView内部Bug???别急,我们慢慢解决它~

    一.写在前面 这也是久违的一整个月没有写Blog,也是由于近期给妹纸找工作,各种坑蒙拐骗,然而都没卵用.额,广大朋友们,成都需要软件测试.线上运维.产品助理的伙伴,赶紧私聊我了.这妹纸,学习能力挺好, ...

  5. 微信快速开发框架(九)-- V3.0发布,代码已更新至Github 新增微店功能

    版本内容 1.修正了缺少对Event.View的支持 2.增加了用户UnionID 3.新增微信小店功能 4.多客服功能 5.单元测试 什么是UnionID 我们知道,每个用户针对一个微信公众账号都有 ...

  6. 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github

    4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...

  7. 微信快速开发框架(七)--发送客服信息,版本更新至V2.2 代码已更新至github

    在V2版本发布的博文中,已经介绍了大多数Api的用法,同时也收到了很多意见,其中发布了几个修正版本,修改了几个bug,在此感谢大家的使用,有了大家的支持,相信快速开发框架会越来越好,也会越来越完善的. ...

  8. 岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯

    岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯 看过了QQ和360斗争的开端高潮,当然现在还不能说这场斗争已经结束,在我看来这次的事件未尝不是一个适 ...

  9. 目录 of 2013-2014-1(内容已更新结束)

    (内容已更新结束) UML部分: ---------------1.概述2.用例图3.类图4.顺序图 MVC部分: ----------------1.概述2.路由3.控制器4.视图5.模型6.安装部 ...

随机推荐

  1. Python(八)进程、线程、协程篇

    本章内容: 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 线程 Threading用于提供线程相关的操作.线程是应用 ...

  2. Javascript本地存储小结

    前言 总括:详细讲述Cookie,LocalStorge,SesstionStorge的区别和用法. 人生如画,岁月如歌. 原文博客地址:Javascript本地存储小结 知乎专栏&& ...

  3. Basic Tutorials of Redis(5) - Sorted Set

    The last post is mainly about the unsorted set,in this post I will show you the sorted set playing a ...

  4. IL接口和类的属性

    上一篇文章学习了IL的入门,接下来我们再通过两个例子来了解下类的属性.构造函数以及接口的使用 一.类的属性.构造函数 1.先看下我们要构建的类的C#代码,然后再进行IL的实现,示例代码如下: [Ser ...

  5. C#获取硬盘序列号的问题求助

    具体问题是这样的:我用下面这段获取硬盘型信息的代码做成的exe文件,在机子上测试的时候,出现直接双击运行和用管理员身份运行结果不一样的情况,这个问题该怎么解决? public static Strin ...

  6. MVC发布到虚拟主机上出现的错误

    问题1:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 现象:无法识别的属性“targetFramework”.请注意属性名称区分大小写. 原因:站点中部署的Web使用的 ...

  7. VS2010中dumpbin工具的使用

    用VS2010生成的.obj文件..lib库..dll库..exe执行文件,如果想查看其中这些文件或库包含了哪些函数以及相关的信息(符号清单),可以通过VS2010自带的dumpbin工具来完成. d ...

  8. 使用 Vue 2.0 实现服务端渲染的 HackerNews

    Vue 2.0 支持服务端渲染 (SSR),并且是流式的,可以做组件级的缓存,这使得极速渲染成为可能.同时, 和 2.0 也都能够配合 SSR 提供同构路由和客户端 state hydration.v ...

  9. Kotlin开发语言文档(官方文档)-- 目录

    开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...

  10. 如何禁止内部viewPager滑动

    众所周知,viewPager是能够滑动的,但有时候我们需要禁止它的滑动(微笑地面对*----*). 情况是这样的: activity中有一个viewPager,viewPager中加入3个Fragme ...