2012-06-22 5 views
18

Ich möchte eine JavaScript-Variable als 'Src' Attribut für ein anderes Tag auf dem gleichen JSP verwenden.Verwenden Sie JS-Variable, um das src-Attribut für <script> festzulegen Tag

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

Ich möchte dieses neue Element wie unten gezeigt erstellen.

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

Bei der Suche in verschiedenen Foren habe ich versucht, die folgenden Optionen zu verwenden, aber sie scheinen nicht zu funktionieren. Ich möchte, dass dieses Ding in allen gängigen Browsern funktioniert.

  1. Setzen Sie diesen Code in das erste Element.

    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "path/to/somelink"; 
    document.body.appendChild(script); 
    
  2. Verwenden Dokument Schreibverfahren in dem ersten Element.

    document.write("<script type='text/javascript' src="+ google.com + "><\/script>"); 
    
  3. Versuchte eine JSTL Variable in dem ersten Element festzulegen, und sie verwenden.

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

Keine dieser Möglichkeiten waren erfolgreich. Irgendwelche Vorschläge, was schief läuft?

+1

Es ist ein beliebtes Skript Laden Utility namens require.js. Es optimiert das Laden und Abhängigkeiten von Skripten, indem synchrone Aufrufe asynchron ausgeführt werden. Dies könnte von Interesse sein. –

+0

Wenn Sie eine Antwort erhalten, sollten Sie eine der Lösungen akzeptieren. :) oder geben Sie die Antwort an, die Sie nützlich fanden. – Mahesh

Antwort

4

Ich benutze etwas ähnliches zu Wahl zwei. Es gibt einen kleinen Fehler in Ihrem Code, da "google.com" von Anführungszeichen umgeben sein muss.

Kompatibilität zu verbessern, sollten Sie es als schreiben:

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

In dieser Situation wäre x die Datei aufgenommen werden.

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

ODER

var x = "path/to/script.js"; 
+0

Ich habe diesen Weg mit den Anführungszeichen versucht, aber es funktioniert nicht, kann nicht sehen, dass das Skript im Quellcode hinzugefügt wird. auch nicht verstanden, warum du sagst, wir müssen es tun wie ''><\/scr "+" ipt> "? irgendeine Bedeutung, warum wir hier verketten? – 1985percy

+0

Einige Browser, insbesondere ältere Versionen von Internet Explorer, denken, dass dies das Ende des '

2

Versuchen:: Sie können es als definieren

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

Was das bedeutet:

  1. Finden Sie das erste Skript Element auf Ihrer Seite
  2. Erstellt ein neues script-Element mit Ihrer mitgelieferten Quelle.
  3. Dann fügt das neue Element vor dem ersten vorhandenen Skriptelement ein.
12

Obwohl CDATA funktioniert gut, mit document.createElement ist auch eine gute Wahl .. Vor allem, wenn Sie einen Wert an eine URL anhängen möchten, sagen für Cache Zerschlagung ..

<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 gut .. :)

+0

wie, wenn ich mehrere js-Dateien laden muss. Gibt es eine bestimmte Syntax, oder muss ich das ganze Skript wiederholen? Vielen Dank !! – ChickenWing24

+0

Schleifen Sie das ganze Skript. Irgendein Code, den Sie schreiben, würde das grundsätzlich tun. Entschuldigung für die späte Antwort. – Mahesh

+0

keine sorgen mann. Vielen Dank! : D – ChickenWing24

0
<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. -->