AS3 预加载器缓存问题?

发布于 2024-10-20 02:31:36 字数 1166 浏览 1 评论 0原文

所以下面的代码是 Lee 的预加载器的实现,它在第一次加载时工作正常,但当浏览器加载缓存文件时会变得疯狂,从 0% 随机跳转到 100%

我尝试过但无济于事:

  • 关闭 gzip 压缩,但我不这样做认为它是
  • 使用 ENTER_FRAME 而不是进度 并完成

     l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, 循环);
        l.contentLoaderInfo.addEventListener(Event.COMPLETE, 完成);
        l.load(new URLRequest("http://www.foo.com/foo.swf"));
    
        函数循环(e:ProgressEvent):无效
        {
            perc = Math.round(e.bytesLoaded / e.bytesTotal * 100);
            lt.text = String(perc);
            如果 (perc >= 100)
                l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, 循环);
        }
    
        函数完成(e:事件):无效
        {
            l.contentLoaderInfo.removeEventListener(Event.COMPLETE, 完成);
            addChild(l);
        }
    

我不相信我加载它不止一次:

public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);  
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            Security.allowDomain("http://www.foo.com");
            preLoader();
        }

So the following code is Lee's implementation of a preloader which works fine first load but goes crazy when the browser loads a cached file, jumping from 0% to 100% randomly

Things I have tried to no avail:

  • switching off gzip compression, tho I dont think it is on
  • Using ENTER_FRAME instead of progress
    and complete

        l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loop);
        l.contentLoaderInfo.addEventListener(Event.COMPLETE, done);
        l.load(new URLRequest("http://www.foo.com/foo.swf"));
    
        function loop(e:ProgressEvent):void
        {
            perc = Math.round(e.bytesLoaded / e.bytesTotal * 100);
            lt.text = String(perc);
            if (perc >= 100)
                l.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, loop);
        }
    
        function done(e:Event):void
        {
            l.contentLoaderInfo.removeEventListener(Event.COMPLETE, done);
            addChild(l);
        }
    

I do not believe I am loading it more than once:

public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);  
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            Security.allowDomain("http://www.foo.com");
            preLoader();
        }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

幻梦 2024-10-27 02:31:36

我发现出现问题是因为文件托管在插件域上。

为了解决这个问题,我更改了 url 以引用主域:

l.load(new URLRequest("http://www.foo.com/foo.swf"))

l.load(new URLRequest("http://foo.maindomain.com/foo.swf"))

并添加

Security.allowDomain("http://foo.maindomain.com");

I discovered the problem happens because the files are hosted on an addon domain.

To fix this I changed the url to reference the main domain:

from

l.load(new URLRequest("http://www.foo.com/foo.swf"))

to

l.load(new URLRequest("http://foo.maindomain.com/foo.swf"))

and also add

Security.allowDomain("http://foo.maindomain.com");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文