论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

Flash在多标签浏览器中的问题(2)

文章类别:Flash | 发表日期:2010-11-4 9:03:07

Flash的源码:

package
{
 import flash.display.Sprite;
 import flash.external.ExternalInterface;
 import flash.system.Security;
 import flash.text.TextField;
 
 /**
  * Flash缓存造成的伪沙箱问题演示
  * @author qhwa
  */
 public class Main extends Sprite
 {
 
  public function Main():void
  {
   var tf:TextField = new TextField();
   tf.text = 'flash ready';
   tf.autoSize = 'left';
   addChild(tf);
 
   //允许被所有其他沙箱中的js或flash调用
   Security.allowDomain("*");
 
   start();
  }
 
  private function start():void
  {
   //在基于IE的多标签浏览器中,这里运行时可能出错
   ExternalInterface.call("alert", "Hi, flash is ready!");
   ExternalInterface.addCallback('drawCircle', drawCircle);
  }
 
  private function drawCircle():void
  {
   TextField(getChildAt(0)).appendText('\nDraw a circle');
 
   graphics.beginFill(Math.random() * 0xFFFFFF, .5);
   graphics.drawCircle(
    Math.random() * stage.stageWidth,
    Math.random() * stage.stageHeight,
    50);
   graphics.endFill();
  }
 
 }
 
}

似乎一旦swf是从缓存中读取的,allowScriptAccess这个配置就不起作用?为了验证是不是缓存引起的,我们每次为swf文件地址后面加上随机的数字,发现就不存在上面的问题了。可见这个问题确实是浏览器缓存造成的。

为swf文件动态加时间戳或随机数,通过防止缓存可以回避掉这个问题。不过这不是一个很好的方案,因为这会极大增加服务器的压力,并且导致页面加载速度一直都很慢。

不过好消息是,目前有个比这个更好的方案:延迟Flash的初始化功能。通过将Flash的ExternalInterface.addCallback时机延后一些,就可以解决这个问题。

视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058