2011-10-10 75 views
1

有许多人抱怨SWF上的加载时间很慢,但这看起来很好。SWF加载时间在SWFObject上加载定时器

我想在SWFObject中添加一个加载定时器javascript来加载一个SWF文件所需的时间,然后将其发回给我们(我将通过AJAX来完成)。

我已经研究过SWFObject回调的可能性,它每10millisecodns启动一个计时器,然后一旦成功就会停止。但是,从这个角度来看,如果嵌入成功,而不是加载,这只是一个开关。

function loadSWF(playURL){ 
     swfobject.embedSWF(playURL, "playdiv", "170", "90", "9.0.0", "expressInstall.swf", color:face00}, {wmode:"opaque",allowfullscreen:"true",allowScriptAccess:"always"}, '', function(e) { 

     var loadTimer = window.setInterval(function() { 

      if(e.success) { 

       milSeconds = milSeconds+10; 
       clearInterval(loadTimer); alert('TIME ' + milSeconds); 
      } else { 

       milSeconds = milSeconds+10; 

      } 
     },10);   


    }); 
    } 

这就是我现在所拥有的。 Obv不会做我们需要的。

有没有其他的路径可以遵循?

回答

5

您也可以查询SWF的PercentLoaded属性,而无需向SWF本身添加任何代码。这里有一个快速(但是马虎)的方法:

var start_time, end_time, total_time; 

function getCurrentTime(){ return new Date(); } 

function checkSWFStatus(swf){ 
    if(swf.PercentLoaded() !== 100){ 
     setTimeout(function(){ 
      checkSWFStatus(swf); 
     }, 50); 
    } else { 
     end_time = getCurrentTime(); 
     total_time = end_time-start_time; 
     console.log("Ended: " +end_time); 
     console.log("Total load time: approximately " +total_time +" milliseconds"); 
    } 
} 

var callback = function (e){ 

    if(e.success && e.ref){ 

     if(!start_time){ 
      start_time = getCurrentTime(); 
      console.log("Started: " +start_time); 
     } 

     //Ensure SWF is ready to be polled 
     setTimeout(function checkSWFExistence(){ 
      if(typeof e.ref.PercentLoaded !== "undefined"){ 
       checkSWFStatus(e.ref); 
      } else { 
       checkSWFExistence(); 
      } 
     }, 10); 

    } 

}; 

swfobject.embedSWF("yourmovie.swf", "targetelement", "550", "400", "9", false, false, false, false, callback); 
0

对于那些有兴趣的人;解决这个问题的唯一办法是让闪拨打电话与:

ExternalInterface.call("some_js_function()", "the-argument"); 

的some_js_function(),则可以停止加载页面时我设置运行计时器。