2012-06-22 22 views
18

Chcę użyć zmiennej javascript jako atrybutu "src" dla innego znacznika w tym samym jsp.Użyj zmiennej JS, aby ustawić atrybut src dla <script> tag

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

Chcę utworzyć nowy element, jak pokazano poniżej.

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

Po przeszukaniu różnych forów, próbowałem użyć następujących opcji, ale nie wydają się działać. Chcę, żeby to coś działało we wszystkich głównych przeglądarkach.

  1. Umieść ten kod w pierwszym elemencie.

    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "path/to/somelink"; 
    document.body.appendChild(script); 
    
  2. Użyj metody zapisu dokumentu w pierwszym elemencie.

    document.write("<script type='text/javascript' src="+ google.com + "><\/script>"); 
    
  3. Próbowałem ustawić zmienną JSTL w pierwszym elemencie i użyć jej.

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

Żaden z tych sposobów były udane. Wszelkie sugestie dotyczące tego, co dzieje się nie tak?

+1

Jest popularny skrypt ładuje narzędzie o nazwie require.js. Optymalizuje on ładowanie skryptów i zależności poprzez synchroniczne wywoływanie asynchroniczne. To może być interesujące. –

+0

Jeśli masz odpowiedź, powinieneś zaakceptować jedno z rozwiązań. :) lub udziel odpowiedzi, która okazała się przydatna. – Mahesh

Odpowiedz

4

Używam czegoś podobnego do wyboru drugiego. W Twoim kodzie jest mały błąd, ponieważ "google.com" musi być otoczony cytatami.

Aby poprawić kompatybilność, można napisać go jako:

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

w tej sytuacji, x byłby plików, które należy uwzględnić. można zdefiniować jako:

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

LUB

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

Próbowałem w ten sposób z cytatami, ale to nie działa, nie można zobaczyć skryptu dodaje się w kodzie źródłowym. również, nie rozumiem, dlaczego mówisz, że musimy zrobić to jak ""><\/scr "+" ipt> "? jakiekolwiek znaczenie, dlaczego tutaj się łączymy? – 1985percy

+0

Niektóre przeglądarki, szczególnie starsze wersje Internet Explorera, uważają, że jest to koniec tagu '

2

Spróbuj:

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

Co to robi:

  1. znaleźć pierwszy element skryptu na swojej stronie
  2. Tworzy nowy element skryptu z dostarczonym źródłem.
  3. Następnie wstawia ten nowy element przed pierwszym istniejącym elementem skryptu.
12

Choć CDATA działa poprawnie, używając document.createElement jest również doskonałym wyborem .. Zwłaszcza jeśli zamierzają dołączyć jakąś wartość do adresu URL, powiedzmy do pamięci podręcznej krach ...

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

+0

jak bout jeśli muszę załadować wiele plików js. czy istnieje określona składnia, czy też muszę zapętlić cały skrypt? dzięki !! – ChickenWing24

+0

Zapętlaj cały skrypt. Każdy napisany kod w zasadzie to zrobi. Przepraszam za późną odpowiedź. – Mahesh

+0

człowiek nie martwi się. dzięki! :RE – 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. --> 
Powiązane problemy