Как мне судить, что флешка загрузилась завершенной

На нашем веб-сайте я встраиваю флеш-память, созданную с помощью flash builder, в html, а ее размер превышает 2M. Из-за плохой сети на загрузку флеш-памяти может уйти 30 секунд. Как мне узнать, что флеш-память полностью загружена браузером?


person john2000    schedule 21.11.2012    source источник
comment
вам следует подумать о прелоадере. загрузите небольшой swf-файл с панелью загрузчика, которая загружает и отображает ход выполнения вашего 2-мегабайтного 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 undefined, но следующий вызов будет нормальным. конечно, вам нужно вызвать clearInterval (initialTimeout); когда если это правда.

так что вы получите что-то вроде:

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