На нашем веб-сайте я встраиваю флеш-память, созданную с помощью flash builder, в html, а ее размер превышает 2M. Из-за плохой сети на загрузку флеш-памяти может уйти 30 секунд. Как мне узнать, что флеш-память полностью загружена браузером?
Как мне судить, что флешка загрузилась завершенной
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
что означает e здесь, в функции swfLoadEvent?
- person john2000; 22.11.2012
это обработчик событий, часть системы обратного вызова 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