查看文章 |
[原创]Chrome浏览器对于flash渲染的一个特点
2009-09-25 15:12
公司营运那边反应,目前我们的游戏,跳出率高达60%,根据营运提供的情报,分析可能是由于用户点击游戏的时候,在加载10K的swfobject.js和50K的Main.swf的时候,我们这边没有任何提示性质的语言,导致如果网络堵塞的时候,用户以为没有任何东西,就会关闭页面,导致跳出率的产生。 我们的页面加载swf是用的swfobject这个js库。因为有50K的swf需要加载,swfobject只检测用户的flash客户端版本是否符合填写的参数,但是swfobject只能监视文档对象是否建立,没有办法监视swf中的对象是否加载完成,所以我修改了Main.swf的代码,在init的时候,会回调一个js函数。 我在swfobject加载swf的时候,先将swf容器的display样式设置为none,并在屏幕中间显示一段提示”正在加载Loader,请稍后“,然后等收到swf在init的时候触发的js回调函数后,将容器的display设置为block,并把提示给去掉。 swfobject.embedSWF("Main.swf", "altContent", "100%", "100%", "10.0.0",null,{}, params, attributes,callBack); function callBack() { if ( !isComplete) { var tip = document.getElementById("tip"); tip.style.top = ( document.documentElement.offsetHeight - 80) / 2 + "px"; tip.style.left = ( document.documentElement.offsetWidth - 320) / 2 + "px"; tip.style.display = "block"; swfobject.getObjectById("Main").style.display= "none"; } } function completeCallBack() { isComplete = true; document.getElementById("tip").style.display = "none"; swfobject.getObjectById("Main").style.display= "block"; } 修改好js脚本后,测试FF,IE,Opera,Safira,都正常, 不过Chrome不正常了,始终显示那段提示文字,无法收到回调函数。 我推测,swf很可能并未真正被加载。 于是我尝试用visibility样式来隐藏swf,果然和我猜测的一样,Chrome可能对flash这样的plugin做了优化,当display为none的时候,根本不会去执行flash,这种情况下,只能放弃用display来控制隐藏/显示,而应该改用visibility样式来控制。 |
最近读者: