flash隐藏时回调js时的怪异bug及修正

今天在调试由产品反馈的一个bug时,非常怪异,具体表现如下:

flash中会有连续3此回调同一个js函数(当然js函数会有不同逻辑区分),依次作用是:提交积分、显示排行榜、显示挑战结果,当flash在第二次回调js函数(即显示排行榜)时,会隐藏游戏(即flash),然后第三次回调时就显示挑战结果的对话框。其实按正常逻辑,这段代码也是有问题的,因为当隐藏flash时(用display:none),肯定会造成浏览器和flash的重绘,这个时候flash已经不存在了,那就无法再回调js函数了,可偏偏这个bug只在chrome中体现出来,ie和FF都是正常隐藏游戏、显示排行榜了,而chrome则是隐藏游戏后不显示挑战结果对话框。因为PM催的紧,就先不管原因,先解决吧,解决方案是把display:none换成visibility:hidden,并把width和height都设置成'0px'(因为visibility会占用空间),恩,解决,提交了。

现在是该找出浏览器表现不同的原因了,我猜想是因为chrome优化太好,导致隐藏那段代码在第三次回调js函数之前就执行了,而ie和FF则稍慢些,回调js函数在隐藏之前执行的,可是又没有很好的方法验证,恩,那就alert调试一下吧,在js函数入口处设置alert函数调用,恩,果然是这样,FF和IE都是在第三次alert之后再隐藏flash,而chrome则是两次alert之后隐藏flash,第三次没有调用了,恩,应该是这样了。(PS:目前也只是猜想而已,不一定正确。)

posted on 2012-11-14 14:28  feibinyang  阅读(207)  评论(0)    收藏  举报

导航