百度空间 | 百度首页 
 
查看文章
 
[原创]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样式来控制。

类别:脚本技术/javascript/flash | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2009-09-25 16:48 | 回复
哦,原来上次拿我做实验是这么回事。
 
2
2009-09-26 10:31 | 回复
呵呵基本看不懂
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu