actionscript-3 - 动态 xml 文本和图像不会在 Flash 中刷新

标签 actionscript-3 flash caching

我有一个简单的 Flash 登录页面,其中有 2 个动态旋转图像的区域和 2 个动态文本区域。所有区域均由单个 XML 文件控制。

当我更改 XML 文件中的文本内容或更新文件夹中的图像并在 adobe flash 编辑器中进行测试时,更改会立即生效。当我打开 Firefox 或 IE 时,带有 Flash 文件的页面没有反射(reflect)更新。我已经删除了我的历史记录,告诉 adobe flash 不允许在我的计算机上存储任何 flash,关闭并重新加载页面,但无济于事。我可以刷新内容的唯一方法是重命名文件,保存在新文件夹中并重命名它从中提取的 xml 页面。我什至在末尾添加了 kiosk.swf?id=#randrange(10000,99999)# 字符串,看看它是否使浏览器认为它是一个新文件。除了重命名和移动文件/文件夹之外,没有什么可以让浏览器显示新内容。

这个简单的 Flash 页面将成为信息亭的登陆页面。

    <style type="text/css" media="screen">
        body { margin:0; padding:0; overflow:hidden;background-color:#153d6f; }
        #myID   { height:100%;background-color:#153d6f; }
    </style>    
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript" src="swffit.js"></script>
   <cfoutput>
       <script type="text/javascript">
            swfobject.embedSWF("kiosk.swf?id=#randrange(10000,99999)#", "myID", "100%", "100%", "9.0.0", "expressInstall.swf");
            swffit.fit("myID");
        </script>
   </cfoutput> 

</head>
<body>
    <div id="myID"></div>
</body>

...................... 根据您的要求,将动态图像拉到两个区域之一的actionscript3 ...................

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;


var my_speed:Number;
var my_total:Number;
var my_images:XMLList;

var my_loaders_array:Array = [];
var my_success_counter:Number = 0;
var my_playback_counter:Number = 0;

var my_slideshow:Sprite = new Sprite();
var my_image_slides:Sprite = new Sprite(); 

var my_timer:Timer;
var my_prev_tween:Tween; 

var my_xml_loader:URLLoader = new URLLoader();
my_xml_loader.load(new URLRequest("content.xml")); 
my_xml_loader.addEventListener(Event.COMPLETE, processXML);




function processXML (e:Event):void{
    var my_xml:XML = new XML(e.target.data); 
    my_speed=my_xml.option2.slideShow2.@SPEED;
    my_images=my_xml.option2.slideShow2.IMAGE;
    my_total=my_images.length();    

    loadImages();
}

function loadImages():void{
    for (var i:Number = 0; i < my_total; i++){
        var my_url:String = my_images[i].@URL;
        var my_loader:Loader = new Loader();
        my_loader.load(new URLRequest(my_url));
        my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        my_loaders_array.push(my_loader); 
    }
}

function onComplete(e:Event):void{
    my_success_counter++;
    if (my_success_counter == my_total){
        startShow();
    }

}  

function startShow():void{
    addChild(my_slideshow);
    my_slideshow.addChild(my_image_slides);

    setChildIndex(my_slideshow,0);

    nextImage();

    my_timer = new Timer(my_speed*1000);
    my_timer.addEventListener(TimerEvent.TIMER, timerListener);
    my_timer.start();


}

function nextImage():void{
    var my_image:Loader = Loader(my_loaders_array[my_playback_counter]);
    my_image_slides.addChild(my_image);
    //my_image.x = (stage.stageWidth - my_image.width)/2;
    //my_image.y = (stage.stageHeight - my_image.height)/2;


    if (my_image.width == my_image.height) {
        my_image.width = 305;
        my_image.height = 305;
    }   else if( my_image.width > my_image.height ) {
            var newWidth = (my_image.width *(305 / my_image.height));
            my_image.height = 305;  
            my_image.width = newWidth;
    }   else if( my_image.width < my_image.height ) {
            var newHeight = (my_image.height *(305 / my_image.width));
            my_image.width = 305;   
            my_image.height = newHeight;

    }

    my_image.x = 80;
    my_image.y = -140;


    new Tween(my_image,"alpha",Strong.easeOut,0,1,1,true); 



} 

function timerListener (e:TimerEvent):void{
    hidePrev();

    my_playback_counter++;
    if (my_playback_counter == my_total){
        my_playback_counter =0;
    }

    nextImage();

} 

function hidePrev():void{
    var my_image:Loader=Loader(my_image_slides.getChildAt(0));
    my_prev_tween = new Tween(my_image,"alpha",Strong.easeOut,1,0,1,true);
    my_prev_tween.addEventListener(TweenEvent.MOTION_FINISH, onFadeOut)

    new Tween(my_image,"alpha",Strong.easeOut,1,0,1,true);

} 

function onFadeOut(e:TweenEvent):void{
    my_image_slides.removeChildAt(0);

}

最佳答案

为了避免在 ActionScript 中缓存,请添加“?”然后在您正在加载的项目的 URL 末尾添加一些独特的字符(可以是图像、swfs、xml,等等)。例如:

var cacheBuster:String = "?"+(new Date()).time.toString();
my_loader.load(new URLRequest(my_url+cacheBuster));

new Date().time 返回自 1970 年 1 月 1 日以来的毫秒数,因此它是生成唯一字符串的不错选择。

如果它的 kiosk.swf 是缓存,则 javascript 非常相似:

var cacheBuster = "?"+(new Date()).getTime().toString();
swfobject.embedSWF("kiosk.swf"+cacheBuster, ....

关于actionscript-3 - 动态 xml 文本和图像不会在 Flash 中刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488918/

相关文章:

actionscript-3 - Actionscript 3 getDefinitionByName 看不到类

jquery - 停止 Clippy 显示鼠标悬停文本

javascript - AS3 中的 jquery each() 函数

javascript - 部署 Google Chrome 扩展; Adobe Flash Player 已停止潜在的不安全操作

actionscript-3 - Flash 隐私弹出对话框缺少 "Remember"复选框

node.js - 动态数据 Express.JS 的缓存控制

Android Webview 的 ClearCache 很慢

spring-data-redis: cacheManager 配置问题

actionscript-3 - 在 ActionScript 中将匿名函数用作事件处理程序-好还是不好?

c# - 翻译我写到 C# 的 ActionScript 3 代码