2010-06-24 5 views
1

J'essaie d'insérer dynamiquement le bouton Tweetmeme en utilisant Javascript. J'utilise actuellement jQuery sur tout le site. Voici le script que j'utilise. Je veux essentiellement faire défiler toutes les entrées de blog avec une classe d'entrée de journal et ajouter le JavaScript suivant à la fin. Ce Javascript vient directement de tweetmeme.com. Cela ne fonctionne pas pour moi et cela a quelque chose à voir avec le code entre append(). Il n'aime pas le deuxième ensemble de balises de script.Insertion dynamique des balises <script> en HTML sur le chargement de la page

<script type="text/javascript"> 
$(document).ready(function() { 

$('.journal-entry').each(function(index) { 
    $(this).append('<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script>'); 
    }); 

}); 
</script> 

Toute aide est appréciée. Merci.

Répondre

2

La fermeture </script> dans la chaîne dans votre append(...) appel ferme le général <script>

Essayez de diviser ce en deux chaînes. E.g:

$(this).append('<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></'+'script>'); 
4

Ne faites pas cela.

L'insertion de <script> contenu HTML dans le DOM n'est pas fiable: il fonctionne subtilement différemment selon les navigateurs, et jQuery ne vous protégera pas des différences.

En particulier, l'écriture innerHTMLne provoque le contenu d'un élément <script> à exécuter, mais déplacer ensuite l'élément <script> d'où il est à un nouveau parent (qui fait partie du processus append jQuery) peut provoquer le script exécuter, mais pas toujours (cela dépend du navigateur).

Dans tous les cas, cela ne marchera jamais, car en regardant button.js, il appelle document.write(). Cette fonction n'a de sens que pour appeler au moment de l'analyse du document initial; Si vous l'appelez d'un événement par la suite, l'appel remplacera tout le contenu de la page, détruisant ainsi votre page existante. Un script qui appelle document.write() peut être exécuté au moment du chargement du document, à partir du chemin d'exécution d'un élément <script>. Vous ne pouvez pas inclure le script dans le contenu créé dynamiquement, car il n'est pas conçu pour cela.

(Si cela vous fait sentir mieux, il est à peine conçu du tout, le script button.js est une charge mal brisée de la vieille merde, y compris une mauvaise URL d'échappements à l'aide escape au lieu du encodeURIComponent correcte -et manquante HTML Il se peut que vous soyez mieux loin de ces idiots.)

Questions connexes