查看文章
 
swfobject 2.1 IE下flash显示不正常以及内存泄漏
2009-08-06 9:58

swfobject 2.1在IE7下flash显示不正常以及内存泄漏

这几天一直为这个很奇怪的问题困扰。最后证明,只有在 swfobject 下 才会出现这种问题。我只测试了 2.1版本。 忙啊。

问题症状:1,使用swfobject加载flash, 使用IE 7。初次打开html页面,正常。 按下F5 刷新。 flash 里面的 textfield 全都挪到位置(0,0)。都叠加到一起。

                  2,初次打开页面正常,按下F5刷新。 页面然后一直处于加载状态。cpu使用率飙升到 60%多,内存 200M ,300,400,、、、 1000M,我赶紧kill掉IE进程。 我笔记本配置 cpu P7350,内存3G.。 不是机器的问题。那肯定是 flash的问题了。

然后反复测试。换flash加载方式, 逐段注释flash里面的脚本。放开。 最后找到。

1, textfield 都挪到 位置 (0,0) , 是因为 我在as3里面是这样写的

           lbl1.x = 0;
            lbl2.x = stage.stageWidth*1/4;
            lbl3.x = stage.stageWidth*1/2;

页面按下F5 刷新的时候, stage.stageWidth 取不到了? 都变成了 0 ?   改成 lbl2.x = 100 ; lbl3.x = 200; 显示正常。 我换其他 flash加载方式,显示正常啊。

2,内存泄漏。 是因为 有这段代码;

list1 = new List;

list1.setSize(stage.stageWidth*1/4,stage.stageHeight*1-20);

var count:uint = list1.rowCount * 2;
           
            for (var i:int = 0; i < count; i++) {
//                dp.push({label:"Item " + i});
            }

可以看到 ,循环里面的内容我都注释掉了。 当按下F5刷新的时候,跟上面一样,stage的值取不到了。给list setsize 肯定无效了。 但是setsize这句话 不会使得flash 死掉。 而是后面的。 取 list1.rowCount ,这个值取 list 的 行数,但是现在 list的 高度为负值。这个行数 就变成一个不知道多少位的数了。下面做循环导致flash以惊人的速度吃内存。

总结: 两个问题的 关键都是 stage.stageWidth 和 stage.stageHeight 在 页面 按下F5 刷新的时候取不到了。从flash本身来讲,很难优化吧。stage的其他属性有可能出问题。不可能不使用stage对象吧。 那就只能找 swfobject 的问题了。

我换做其他加载方式,是正常的。 算了。到此为止吧。很忙啊。 一个字,换、、、、、


类别:flash技术||添加到搜藏 |分享到i贴吧|浏览(988)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu