2013-11-06 3 views
0

Не могли бы некоторые гении помочь в решении этой проблемы? Это будет оцененоДинамический публикация метода обратного вызова внешнего интерфейса swfobject undefined

На самом деле я флэш-музыкальный проигрыватель загружен с помощью конфигурационного файла config.xml имени

пример Flash Player Действие сценария

**myUltimateMp3Player.loadConfig("config.xml");** 

import flash.external.ExternalInterface; 
stop(); 
// ExternalInterface receive 
if (ExternalInterface.available) { 
    ExternalInterface.addCallback("sendTextFromHtml", null, function(val:String):Void {  
    myUltimateMp3Player.loadConfig(val); }); 
} 

Я попытался встраивать flash динамически используя Swf-объект, поэтому, когда событие click обрабатывается из списка из html, соответствующий файл config.xml должен быть загружен на флеш-плеер.

Пример HTML-код:

$(document).on("click", "#Musiclist li", function() {  
    var c = "youtube-playlist"; 
    $("#media-" + c).remove(); 
    createMedia(c); 
    var id=this.id; 
    var idxml=id+".xml"; 
    var swfPanel="media-" + c; 
    var flashvars = {}; 
    var params = {}; 
    params.swliveconnect = "true"; 
    params.allowfullscreen = "true"; 
    params.allowscriptaccess = "always"; 
    var attributes = {}; 
    attributes.id = "flashobj"; 
    attributes.name = "flashobj"; 
    swfobject.embedSWF("source.swf", "flashcontent", "100%", "100%", "9.0.0", "swf/expressInstall.swf", flashvars, params, attributes,callbackFn); 
}); 

функция обратного вызова

//This function is invoked by SWFObject once the <object> has been created 
var callbackFn = function (e){ 
    //Only execute if SWFObject embed was successful 
    if(!e.success || !e.ref){ return false; } 
    swfLoadEvent(function(){ 
     var obj=e.ref; 
     obj.sendTextFromHtml("config.xml"); 
     alert("The SWF has finished loading!"); 
    }); 
}; 

Функция держать таймер значение и ожидает SWF-файла PercentLoaded, пока он не достигнет "100"

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

Так что я не могу понять это то, что я делаю неправильно,

Ошибка получения была,

Uncaught ReferenceError: e is not defined

Если я не использую в swfLoadEvent таймера

ошибка получена,

Uncaught TypeError: Object # has no method 'sendTextFromHtml'

ответ

0

e не является глобальной переменной. попробуйте изменить свой swfLoadEvent функцию, чтобы передать ссылку на ГИФы в качестве аргумента:

function swfLoadEvent(swf, fn){ 
    swf.sendTextFromHtml("config.xml"); 
    ... 
} 

которая затем вызывается в

swfLoadEvent(e.ref, function(){ 
    ... 
});