Как да преценя, че флашът е зареден завършен

В нашия уебсайт вграждам флаш, създаден от flash builder в html, и размерът на флаш е повече от 2M. Поради лошата мрежа може да са необходими 30 секунди за зареждане на светкавицата. Как да разбера, че флашът е зареден напълно от браузъра?


person john2000    schedule 21.11.2012    source източник
comment
трябва да помислите за предварително зареждане. заредете малък swf с лента за зареждане, която зарежда и показва напредъка на вашия 2M swf.   -  person dtudury    schedule 21.11.2012


Отговори (2)


Можете да анкетирате SWF, за да получите неговата PercentLoaded стойност.

Ето един начин да го направите (кодът е копиран от learnswfobject.com):

function swfLoadEvent(fn){
    //Ensure fn is a valid function
    if(typeof fn !== "function"){ return false; }
    //This timeout ensures we don't try to access PercentLoaded too soon
    var initialTimeout = setTimeout(function (){
        //Ensure Flash Player's PercentLoaded method is available and returns a value
        if(typeof e.ref.PercentLoaded !== "undefined" && e.ref.PercentLoaded()){
            //Set up a timer to periodically check value of PercentLoaded
            var loadCheckInterval = setInterval(function (){
                //Once value == 100 (fully loaded) we can do whatever we want
                if(e.ref.PercentLoaded() === 100){
                    //Execute function
                    fn();
                    //Clear timer
                    clearInterval(loadCheckInterval);
                }
            }, 1500);
        }
    }, 200);
}

//This function is invoked by SWFObject once the <object> has been created
var callback = function (e){

    //Only execute if SWFObject embed was successful
    if(!e.success || !e.ref){ return false; }

    swfLoadEvent(function(){

        //Put your code here
        alert("The SWF has finished loading!");

    });

};

swfobject.embedSWF("movie.swf", "flashcontent", "550", "400", "9", false, false, false, false, callback);
person pipwerks    schedule 21.11.2012
comment
какво означава e тук във функцията swfLoadEvent? - person john2000; 22.11.2012
comment
това е манипулатор на събития, част от системата за обратно извикване на swfobject. Вижте learnswfobject.com/advanced-topics/the-callback-function и code.google.com/p/ swfobject/wiki/ - person pipwerks; 23.11.2012

отговорът на pipwerks работи добре. можете дори да получите по-ниска стойност: вместо 1500 само 100 ще бъде добре.

но имах някои проблеми с Firefox. вместо таймаут, initialTimeout трябва да бъде timeInterval, тъй като на FF понякога, при първо извикване ще имате e.ref.PercentLoaded недефиниран, но следващото извикване ще бъде добре. разбира се, трябва да извикате clearInterval(initialTimeout); когато ако е вярно.

така че ще получите нещо като:

    var initialTimeout = setInterval(function (){
     if(typeof e.ref.PercentLoaded !== "undefined" && e.ref.PercentLoaded()){
         clearInterval(initialTimeout);
person sebpatu    schedule 26.05.2016