禁用as3缓存。

4

我有一个在Flash Player中运行的AS3应用程序,旨在刷新存储在服务器上的图像。每隔1秒钟,服务器就会用新的图像替换旧的图像。

为了从服务器获取图像而不是缓存中获取,我必须添加以下随机数方法:

loader = new URLLoader();
var request:URLRequest = 
new URLRequest(
   "http://www.theServer.com/myImage.png?random"+(Math.random() * 10000));
loader.load(request);

这种方法的整个刷新过程都能够工作。

但是很让人烦恼的是,这种方法会在临时文件夹中生成临时文件,而且这些文件还会越来越多:

C:\Users\MyName\AppData\Local\Microsoft\Windows\INetCache

有没有办法禁用缓存,就像在Air中可以做的那样? 我之所以问这个问题,是因为该应用程序要运行在一个带有Flash Player 10的嵌入式平台上,可能无法访问Flash Player设置。

谢谢。


3
请服务器返回pragma: no-cache头信息,以及其他指示浏览器不缓存该请求结果的头信息。这样,您就不需要在请求中添加随机数字了。 - Vesper
1个回答

8

感谢 Vesper 的提示, 我终于找到了一种方法来禁用 AIR 和 ActionScript 的缓存:

    function loadURLWitoutCaching(theURL:String):void
    {
        var _imgLoader:Loader       = new Loader();
        _imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
        _imgLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoadingError);

        var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
        var request:URLRequest = new URLRequest(theURL);
        request.data = new URLVariables("cache=no+cache");
        request.method = URLRequestMethod.POST;
        request.requestHeaders.push(header);
        try {
            _imgLoader.load(request);
        } catch (error:Error) {
            trace("Unable to load requested document.");
        }
    }

    private function onLoadingError(e:IOErrorEvent):void
    {
        // Do something
    }

    private function onLoadComplete(evt:Event):void
    {
        // Do something
    }

我不确定 "URLVariables" 是否必需,但它似乎有所帮助。

现在我再也看不到任何图像被缓存在 "C:\Users\myName\AppData\Local\Microsoft\Windows\INetCache" 文件夹中了。

祝你有一个愉快的一天。


1
URLVars 不是必需的,我认为它们没有任何帮助。头部已经完成了它的工作 :) - Andrey Popov
这太棒了,非常有用。 - user5066707

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接