11
votes

JavaScript: Modification SRC-Attribut d'une étiquette d'intégration

J'ai le scénario suivant.

i Montrez à l'utilisateur certains fichiers audio du serveur. L'utilisateur clique sur un, puis sur OnfilesElue est finalement exécuté avec le dossier et le fichier sélectionné. Quelle est la fonction change la source de l'objet incorporé. Donc, d'une manière, c'est un aperçu du fichier sélectionné avant de l'accepter et de sauvegarder le choix de l'utilisateur. une aide visuelle . p>

html p> XXX PRE>

JavaScript P>

function onFileSelected(file, directory) {
   jQuery('embed#audio_file').attr('src', '/resources/audio/'+directory+'/'+file);
};


0 commentaires

7 Réponses :


22
votes

Vous devez supprimer l'élément incorporer et réinjecter-le avec le nouveau paramètre SRC .

incorporé Comme objet et similaire sont deux éléments qui, étant dus leurs utilisations spéciales (vidéo, audio, flash, activeX, ...), dans certains navigateurs sont géré différemment d'un élément DOM normal. Modifiant ainsi l'attribut SRC pourrait ne pas déclencher l'action que vous attendez.

La meilleure chose à faire est de supprimer l'objet existant incorporer un réinsérer. Si vous écrivez une sorte de fonction wrapper avec l'attribut SRC comme paramètre, il faut être facile


2 commentaires

J'ai essayé ça, mais cela ne fonctionnait pas d'une manière ou d'une autre. Il a annexé la nouvelle étiquette d'intégration, mais n'a pas retiré l'ancien. Je pense utiliser une variation de celui-ci avec un iframe, mais ce n'est pas une solution très élégante.


Mon problème était que la modification de manière programmée par la SRC et l'appel de la pièce de théâtre () a toujours amené le SRC original à jouer. Suite à ce conseil, je supprime maintenant et ré-ajouter l'élément incorporé et le son joue correctement. Merci



1
votes

jQuery suit la Déclaration CSS-Esque:

au lieu de faire xxx

plutôt xxx

que Way, JQuery ne récupère que l'objet d'id = "audio_file".


2 commentaires

Il me semble que votre sélecteur est "moins spécifique" et pourrait avoir un succès de performances plus élevé, ne peut pas vraiment voir la connexion à votre citation "Déclaration CSS-ESQUE" ... En plus, si vous lisez l'OP, cela fonctionne sur certains navigateurs Mais pas tous, donc ce n'est probablement pas une erreur de syntaxe ...


@Leon, JQuery groupa les différentes implémentations JavaScript dans leur bibliothèque afin que nous (développeurs) n'ayez pas à vous en soucier. Je pense que c'est l'utilisation interne des tags relatifs à certains navigateurs qui en conflit, afin que cela puisse être une erreur de syntaxe.



6
votes

J'ai également été confronté au même problème lorsque je veux changer "SRC" -Attribute d'élément "incorporé", donc ce que j'ai fait, est donné ci-dessous: xxx

et cela fonctionnera bien Dans mon application.

Conclusion: - Vous devez d'abord retirer l'élément d'intégration, puis vous devez la réinsérer avec le changement de SRC.


0 commentaires

2
votes

Il y a un bug en chrome, donnez-lui une étoile pour l'avoir réparé plus tôt: http://code.google.com/p/chromium/issues/detail?id=69648


0 commentaires

1
votes

Ajouter div à Embed Tag,

            var pdfId = document.getElementById("pdfId");
            pdfId.removeChild(pdfId.childNodes[0]);
            var embed = document.createElement('embed');
            embed.setAttribute('src', embedUrl);
            embed.setAttribute('type', 'audio/mpeg');
            pdfId.appendChild(embed);


0 commentaires

0
votes

<embed id="element-embed" style="width:1100px; height: 700px;">


0 commentaires

3
votes

Ceci est un bogue en chrome. Une solution alternative est au lieu de changer SRC d'élément d'intégration, essayez de remplacer cloné incorporé avec le nouveau SRC xxx


0 commentaires