ожидание загрузки swfobject.js дает мне бесконечный цикл - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть скрипт JavaScript, который использует SWFobject для встраивания флеш-плеера. Когда мне нужно вставить флэш-плеер с

swfobject.embedSWF(..)

Я получаю сообщение о том, что swfobject не определен. Я считаю, что это происходит потому, что наш веб-сайт кэширует JavaScript для моего приложения, но не кэширует файл swfobject.js, поэтому myApp.js, который вызывает swfobject.embedSWF (..), загружается задолго до swfobject.js. В настоящее время я не могу изменить то, что кэшируется, поэтому я решил эту работу:

while(!$(that.mediaPlayer).find('#'+that.playerID)[0]){
     console.log(that.playerID+' not defined');
     that.embedFlashPlayer(1,1);
}

...

this.embedFlashPlayer = function (width, height){
    var that = this;
    var playerID =  that.playerID;
    var server = document.URL.replace(/^.*\/\//,'').replace(/\..*$/,'');
    var flashvars = {};
    var flashSrc = "/flash/AS3MediaPlayer.swf?server"+server+"&playerID="+playerID;

    //parameters
    var params = {};
    params.movie = flashSrc;
    params.quality = "high";
    params.play = "true";
    params.LOOP = "false";
    params.wmode = "transparent";

    //attributes
    var attr = {};
    attr.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
    attr.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,16,0";
    attr.width = "" + width;
    attr.height = "" + height;
    attr.id = playerID;
    //console.log("embedding flash object with id "+playerID);

    //command to embed flash object
     try{
           swfobject.embedSWF(flashSrc, "no-flash", width, height,"9.0.0","",flashvars,params);
     }catch(err){
      // I DON'T KNOW WHAT TO DO HERE
     }

     return true;
}

Мой код проверяет, был ли записан объект flash. Если это не так, он вызывает метод embed this.embedFlashPlayer () несколько раз в цикле while, пока не будет найден div, содержащий swf. Беда в том, что это просто петли навсегда. Любое предложение о том, что я могу сделать в блоке try-catch, если swfobject не определен? Я на 90% уверен, что это потому, что мой скрипт загружается быстрее и выполняет команду embedSwfObject до загрузки библиотеки, но я могу ошибаться. Мой скрипт выполняется в команде $ (function () {...}). Будем благодарны за любые теории, предложения, идеи относительно того, как я могу решить эту проблему.

1 Ответ

1 голос
/ 30 сентября 2011

while ...? Используйте window.setInterval:

...
    var interval = window.setInterval(function(){
        //Code to check whether the object is ready or not.
        if($(that.mediaPlayer).find('#'+that.playerID).length){
             clearInterval(interval);
        }
    }, 100); //Each 100ms = 10 times a second.
...

Вы пытаетесь использовать while для опроса . setInterval обычно используется вместо while, потому что (как вы могли заметить), while вызывает «зависание» браузера.

...