0

これが他の場所で回答されている場合は申し訳ありませんが、一致するものが見つかりません。

私は 2 つの swf を持っています。プリローダー(Aとしましょう)といくつかのコンテンツ(B)。A は B をロードし、それを子として追加します。すべてが美しく機能しています (ここで見ることもできます)。

私が抱えている小さな問題が 1 つだけあります。通常、URLLoader クラスを使用してイメージなどをフラッシュにロードするとき+ "?" + new Date().getTime()は、URLRequest に追加して、ターゲットの最新バージョンを強制的にロードするようにします。つまり、キャッシュされたバージョンを使用してフラッシュを停止します。ここで、B を A に追加するローダーにこれを実行しようとすると、URL ( #2035 URL not found) が見つかりません。だから私の質問は、私がやろうとしていることは可能ですか、それともBのキャッシュを止めるために別のアプローチをとるべきですか?

プリローダーのコードは次のとおりです。

package 
{
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.ProgressEvent;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.ErrorEvent;
    import flash.net.URLLoader;
    import flash.text.TextField;

    public class claude_loader extends MovieClip
    {
        public var main_movie:Loader = new Loader();
        public var rss_loader:URLLoader;
        private var perc_text:TextField = new TextField();
        public function claude_loader()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            with (perc_text)
            {
                x = this.stage.stageWidth / 2;
                y = this.stage.stageHeight / 2;
            }
            addChild(perc_text);
            main_movie.load(new URLRequest("claudia_summers.swf"+ "?" + new Date().getTime()));
            main_movie.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, load_progress);
            main_movie.contentLoaderInfo.addEventListener(Event.COMPLETE,on_complete);
        }
        public function load_progress(e:ProgressEvent):void
        {
            var perc:Number = Math.round((e.bytesLoaded/e.bytesTotal)*100);
            perc_text.text = "Loading " + perc + "%";
            if (e.bytesLoaded == e.bytesTotal)
            {
                perc_text.text = "Loading done";
            }
        }
        public function on_complete(e:Event):void
        {
            rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
            rss_loader.addEventListener(Event.COMPLETE,rss_complete);
            perc_text.text = "Loading RSS";
        }
        public function rss_complete(e:Event):void
        {
            MovieClip(main_movie.content).rss_xml = XML(e.target.data);
            addChild(main_movie);
        }

    }
}
4

1 に答える 1

0

方法/理由はわかりませんが、追加String()new Date().getTime()て main_movie にIOErrorEventリスナーを与えると問題が解決します。これは確かにこれらの追加がなくても機能するはずだったので、どこかにバグがあると思いますか?とにかく、すべてのあなたの助けに感謝します!

作業コード:

package 
{
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.display.Loader;
    import flash.net.URLRequest;
    import flash.events.ProgressEvent;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.ErrorEvent;
    import flash.net.URLLoader;
    import flash.text.TextField;
    import flash.events.IOErrorEvent;

    public class claude_loader extends MovieClip
    {
        public var main_movie:Loader = new Loader();
        public var rss_loader:URLLoader;
        private var perc_text:TextField = new TextField();
        public function claude_loader()
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            with (perc_text)
            {
                x = this.stage.stageWidth / 2;
                y = this.stage.stageHeight / 2;
                textColor = 0xFFFFFF;
            }
            addChild(perc_text);
            main_movie.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,catch_error);
            main_movie.load(new URLRequest("claudia_summers.swf" + "?" + String(new Date().getTime())));
            function catch_error(e:IOErrorEvent):void
            {
            main_movie.load(new URLRequest("claudia_summers.swf"));
            perc_text.text = "Failed non-cache load"
            }
            main_movie.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, load_progress);
            main_movie.contentLoaderInfo.addEventListener(Event.COMPLETE,on_complete);
        }
        public function load_progress(e:ProgressEvent):void
        {
            var perc:Number = Math.round((e.bytesLoaded/e.bytesTotal)*100);
            perc_text.text = "Loading " + perc + "%";
            if (e.bytesLoaded == e.bytesTotal)
            {
                perc_text.text = "Loading done";
            }
        }
        public function on_complete(e:Event):void
        {
            rss_loader = new URLLoader(new URLRequest("http://news.sulsc.org/feed"));
            rss_loader.addEventListener(Event.COMPLETE,rss_complete);
            perc_text.text = "Loading RSS";
        }
        public function rss_complete(e:Event):void
        {
            MovieClip(main_movie.content).rss_xml = XML(e.target.data);
            addChild(main_movie);
        }

    }
}
于 2013-06-07T19:59:04.577 に答える