Таймер загрузки на SWFObject для времени загрузки SWF - PullRequest
1 голос
/ 10 октября 2011

Наличие множества людей, жалующихся на медленное время загрузки SWF, но с этой точки зрения это нормально.

Я бы хотел добавить таймер загрузки в JavaScript-код SWFObject, чтобы узнать, сколько времени занимает загрузка SWF-файла, а затем отправить его нам (я сделаю это через AJAX).

Я рассмотрел возможные варианты с помощью обратного вызова SWFObject, который запускает таймер каждые 10 миллисекунд и затем останавливается после успешного завершения. Но, глядя на это, это просто переключение, если вставка прошла успешно, а не загрузка.

    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);          


    });
    }

Вот что у меня сейчас. Обв не будет делать то, что нам нужно.

У кого-нибудь есть другой путь?

Ответы [ 2 ]

5 голосов
/ 11 октября 2011

Вы также можете запросить свойство PercentLoaded SWF без необходимости добавлять какой-либо код в сам 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 голосов
/ 10 октября 2011

для тех, кому интересно; Единственный способ решить эту проблему состоял в том, чтобы заставить вспышку сделать вызов с:

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

Функция some_js_function () может остановить таймер, который я установил при загрузке страницы.

...