2010-12-04 35 views
0

Je suis en train de cloner un flash dans ie et de changer une variable pendant que cela. C'est la fonction:Problèmes de clonage d'un objet (.clone) dans IE

$(function() { 
    $("select[name='variation3']").live('change', function() { 
    var player = $(this).parent().parent().parent().find('object:first'); 
    if(player.length == 0) 
     player = $(this).parent().parent().parent().find('.player_not_single, .player_singele'); 

    var $param = player.find("param[name='flashvars']"); 
    var path = player.closest('.post1').attr('data-demo'); 

    //$param.attr('value', $param.attr('value').replace(/soundFile=([^&]+)/, 'soundFile=' + path + $(this).find(':selected').val() + '.mp3')); 

    $param.attr("value", function(i,v) { return v.replace(/soundFile=([^&]+)/, 'soundFile=' + path + $(this).find(':selected').val() + '.mp3'); }); 

    var new_player = player.clone(); 
    new_player.insertBefore(player); 
    player.remove(); 
    }); 
}); 

En FF cela fonctionne très bien, mais enIE il fait des problèmes. Voici le code avant le clonage:

<object name="audioplayer_1" width="270" height="24" id="audioplayer_1" 
     classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
     style="outline-style:none; outline-color:invert; outline-width:medium;"> 
    <param name="bgcolor" value="#FFFFFF"/> 
    <param name="wmode" value="transparent"/> 
    <param name="menu" value="false"/> 
    <param name="flashvars" value="animation=no&encode=no&initialvolume=60&remaining=no&noinfo=yes&buffer=3&checkpolicy=no&rtl=no&bg=363635&text=333333&leftbg=4f4f4f&lefticon=787171&volslider=71bced&voltrack=777987&rightbg=4d4d4d&rightbghover=66a7d9&righticon=969696&righticonhover=000000&track=c2bebe&loader=5f91f5&border=000000&tracker=90b7d1&skip=b3b3b3&soundFile=http%3A%2F%2Fwww.gameaudio.net%2Fprelisten%2Fanotherworld%2Ffulledit.mp3&playerID=audioplayer_1"/> 
    <param name="movie" value="http://www.gameaudio.net/wp-content/plugins/audio-player/assets/player.swf?ver=2.0.4.1"/> 
</object> 

Et ce code après le clonage:

<object name="audioplayer_1" width="270" height="24" id="audioplayer_1" 
     classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
     style="outline-style:none; outline-color:invert; outline-width:medium;"> 
    <param name="_cx" value="7143"/> 
    <param name="_cy" value="635"/> 
    <param name="FlashVars" value=""/> 
    <param name="Movie" value="http://www.gameaudio.net/wp-content/plugins/audio-player/assets/player.swf?ver=2.0.4.1"/> 
    <param name="WMode" value="Transparent"/> 
    <param name="BGColor" value="FFFFFF"/> 
    [...] 
</object> 

Il n'est pas la même chose. Dans certaines parties oui, mais pas tous et esp. les parties les plus importantes sont manquantes. Quelle pourrait être l'erreur?

MISE À JOUR: Voici mon code actuel: « fonction embedAudioPlayer (replaceElemIdStr, audiofile) {

swfobject.embedSWF( 
    "http://www.gameaudio.net/wp-content/plugins/audio-player/assets /player.swf?ver=2.0.4.1", 
    replaceElemIdStr, 
    width, 
    height, 
    "9.0.115", 
    "expressInstall.swf", 
    { 
     soundFile: audioFile 
    }); 

}

$ (function() {

$ (" sélectionner [ name = 'variation3'] "). live ('change', function() {

player = $(this).parent().parent().parent().find('.player_not_single, .player_singele'); 

var $param = player.find("param[name='flashvars']"); 
var path = player.closest('.post1').attr('data-demo'); 
var audioFile = path + $(this).find(':selected').val() + '.mp3'; 
var uniqueId = 'audio-' + +new Date; 
player.replaceWith('<div id="+uniqueId+"/>'); 
embedAudioPlayer(uniqueId, audioFile); 

}); '

fonction embedAudioPlayer (remplacerElemIdStr, fichier audio) { var swfobject = audioplayer_swfobject;
swfobject.embedSWF ( "http://www.gameaudio.net/wp-content/plugins/audio-player/assets/player.swf?ver=2.0.4.1" replaceElemIdStr, 250, 50, "9.0.115", "expressInstall.swf", { soundFile: fichier audio }); }

$ (function() {

$ ("select [name = 'variation3']") vivre ('changement', la fonction() {

player = $(this).parent().parent().parent().find('.player_not_single, .player_singele'); 

var $param = player.find("param[name='flashvars']"); 
var path = player.closest('.post1').attr('data-demo'); 
var audioFile = path + $(this).find(':selected').val() + '.mp3'; 
var uniqueId = 'audio-' + +new Date; 
player.replaceWith('<div id="+uniqueId+"/>'); 
embedAudioPlayer(uniqueId, audioFile); 

.});

Mise à jour:

` fonction embedAudioPlayer (replaceElemIdStr, audiofile) {var swfobject = audioplayer_swfobject;
swfobject.embedSWF ( "http://www.gameaudio.net/wp-content/plugins/audio-player/assets/player.swf?ver=2.0.4.1" replaceElemIdStr, 250, 50, "9.0.115", "expressInstall.swf", { soundFile: fichier audio }); }

$ (function() {

$ ("sélectionnez [name = 'variation3']").vivre ('changement', la fonction() {

player = $(this).parent().parent().parent().find('.player_not_single, .player_singele'); 

var $param = player.find("param[name='flashvars']"); 
var path = player.closest('.post1').attr('data-demo'); 
var audioFile = path + $(this).find(':selected').val() + '.mp3'; 
var uniqueId = 'audio-' + +new Date; 
player.replaceWith('<div id="+uniqueId+"/>'); 
embedAudioPlayer(uniqueId, audioFile); 

}); `

+0

Souhaitez-vous publier une URL à un exemple de page avec ce problème? –

Répondre

1

Firefox et IE utilise tout sauf le Netscape Plugin Application Programming Interface (NPAPI) pour Flash. Firefox (et al.) Utilise les éléments param mais IE lit les attributs. C'est ennuyeux de spécifier tout deux fois mais that's what you have to do sauf si vous utilisez quelque chose comme swfobject qui le fait pour vous (hautement recommandé).

sur l'utilisation de mise à jour selon swfobject:

On dirait que vous êtes essentiellement essayer de ré-écrire swfobject.embedSWF En utilisant jQuery.clone. Je suis sûr que cela pourrait fonctionner, mais je vous suggère de vous en tenir à swfobject pour l'intégration Flash et jQuery pour le DOM. J'utilise la structure suivante:

function embedAudioPlayer(replaceElemIdStr, audioFile) { 
    // customize these options for the audio player you're using 
    swfobject.embedSWF(
     "yourplayer.swf", 
     replaceElemIdStr, 
     width, 
     height, 
     "9.0.115", 
     "expressInstall.swf", 
     { 
      soundFile = audioFile 
     }); 
} 

$("select[name='variation3']").live('change', function() { 
    // ... 
    var audioFile = path + $(this).find(':selected').val() + '.mp3'; 
    var uniqueId = 'audio-' + +new Date; 
    player.replaceWith('<div id="+uniqueId+"/>'); 
    embedAudioPlayer(uniqueId, audioFile); 
}); 
  1. Créer une fonction embedAudioPlayer et l'utiliser pour tout à la fois au chargement de la page initiale et en réponse à des événements de page.
  2. Lors de la réponse à des événements de page, utilisez jQuery pour déterminer l'URL du fichier soundFile et l'élément de destination où un nouveau lecteur audio doit être créé.
+0

L'objet swf est utilisé. Il génère le 1er code ci-dessus. Il semble que l'objet swf n'est pas exécuté, une fois le flash cloné. Puis-je l'appeler à la fin de ma fonction? – Cindy

+0

personne ici qui peut m'aider avec ça? – Cindy

+0

Ajouté structure suggérée depuis que vous utilisez swfobject –