web-dev-qa-db-fra.com

Utilisez la variable JS pour définir l'attribut src pour la balise <script>

Je veux utiliser une variable javascript comme attribut 'src' pour une autre balise sur le même jsp.

<script>
var link = mylink // the link is generated based on some code
</script>

Je veux créer ce nouvel élément comme indiqué ci-dessous.

<script src="mylink">
</script>

En recherchant divers forums, j'ai essayé d'utiliser les options suivantes, mais elles ne semblent pas fonctionner. Je veux que cette chose fonctionne sur tous les principaux navigateurs.

  1. Mettez ce code dans le premier élément.

    var script   = document.createElement("script");
    script.type  = "text/javascript";
    script.src   = "path/to/somelink";
    document.body.appendChild(script);
    
  2. Utilisez la méthode d'écriture de document dans le premier élément.

    document.write("<script type='text/javascript' src="+ google.com + "><\/script>");
    
  3. J'ai essayé de définir une variable JSTL dans le premier élément et de l'utiliser.

    <c:set var="URL" value="mylink"/>
    

Aucun de ces moyens n'a réussi. Des suggestions sur ce qui ne va pas?

26
1985percy

Bien que CDATA fonctionne correctement, utiliser document.createElement est également un excellent choix. Surtout si vous souhaitez ajouter de la valeur à une URL, par exemple pour le contournement de la mémoire cache.

<script type="text/javascript"> 
    var JSLink = "/Folder/sub_folder/version.js?version=" + Math.random();
    var JSElement = document.createElement('script');
    JSElement.src = JSLink;
    JSElement.onload = OnceLoaded;
    document.getElementsByTagName('head')[0].appendChild(JSElement);

    function OnceLoaded() {
        // Once loaded.. load other JS or CSS or call objects of version.js
    }
</script>

Code bien .. :)

12
Mahesh

J'utilise quelque chose de similaire au choix deux. Votre code contient une légère erreur car "google.com" doit être entouré de guillemets.

Pour améliorer la compatibilité, vous pouvez l'écrire comme suit:

document.write("<script type='text/javascript' src='"+ x + "'><\/scr" + "ipt>");

Dans cette situation, x serait le fichier à inclure. Vous pouvez le définir comme suit:

var x = "http://google.com/script.js";

OR

var x = "path/to/script.js";
5
Gavy

Pouvez-vous utiliser jQuery? Si oui, vous pouvez utiliser getScript():

http://api.jquery.com/jQuery.getScript/

$.getScript(mylink, function() {
   // do something using the JS that was loaded.
});
4
JonWarnerNet

Essayer:

(function(d){
     var file = 'yourJS.js';
     var ref = d.getElementsByTagName('script')[0];
     var js = d.createElement('script');
     js.src = file;
     ref.parentNode.insertBefore(js, ref);
}(document));

Qu'est-ce que cela fait:

  1. Trouvez le premier élément de script sur votre page
  2. Crée un nouvel élément de script avec votre source fournie.
  3. Insère ensuite ce nouvel élément avant le premier élément de script existant.
2
chaoskreator
<xsl:variable name="Path" select="/root/folder/"></xsl:variable> <!-- Global path variable. -->
<xsl:variable name="myScriptPath" select="concat($Path, 'myScript.js')"></xsl:variable> <!-- Relative script path variable. -->
<script src="{$myScriptPath}"/> <!-- Attach script. -->
0
Zon