Вопрос по jsp, jsp-tags, javascript – Используйте переменную JS, чтобы установить атрибут src для <script> tag

26

Я хочу использовать переменную javascript в качестве «src» атрибут для другого тега на том же JSP.

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

Я хочу создать этот новый элемент, как показано ниже.

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

При поиске на различных форумах я пытался использовать следующие параметры, но они, похоже, не работают. Я хочу, чтобы эта штука работала во всех основных браузерах.

Put this code in the first element.

var script   = document.createElement("script");
script.type  = "text/javascript";
script.src   = "path/to/somelink";
document.body.appendChild(script);

Use document write method in the first element.

document.write("<script type='text/javascript' src="+ google.com + "><\/script>");

Tried to set a JSTL Variable in the first element and use it.

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

Ни один из этих способов не был успешным. Любые предложения о том, что идет не так?

Если вы получили ответ, вы должны принять одно из решений. :) или предоставьте ответ, который вы нашли полезным. Mahesh
Существует популярная утилита загрузки скриптов под названием require.js. Он оптимизирует загрузку скрипта и зависимости, делая синхронные вызовы асинхронными. Это может представлять интерес. Jack Stone

Ваш Ответ

5   ответов
12

Хотя CDATA работает нормально, использование document.createElement также является отличным выбором. Особенно, если вы намереваетесь добавить какое-то значение в URL, скажем, для очистки кэша.

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

Код хорошо .. :)

Я попробовал это, и это работает, но не так, как ожидалось. В моем случае исходный сценарий - это просто длинная текстовая переменная, список фотографий и т. Д., Но при вызове в резидентном сценарии эта переменная пуста ... если только ... я не вставляю "предупреждение" & quot; заявление там. Кажется, какое-то событие должно быть запущено до того, как переменная получит строку. Есть идеи? Я выложил проблему здесь (stackoverflow.com/questions/54583628/…) но все ответы были о не по теме.
не беспокойся человек. Спасибо! : D
Цикл весь сценарий .. Любой код, который вы пишете, будет в основном так. Простите за поздний ответ.
Как насчет того, если мне нужно загрузить несколько файлов JS. Есть ли определенный синтаксис, или я должен зациклить весь этот сценарий? Спасибо !!
2

Пытаться:

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

Что это делает:

  1. Find the first script element on your page
  2. Creates a new script element with your supplied source.
  3. Then inserts that new element before the first existing script element.
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. -->
4

Вы можете использовать JQuery? Если это так, вы могли бы использоватьgetScript():

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

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

Я использую что-то похожее на второй вариант. В вашем коде есть небольшая ошибка, так как & quot; google.com & quot; должен быть в кавычках.

Чтобы улучшить совместимость, вы можете написать это так:

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

В этой ситуации,x будет файл, который будет включен. Вы можете определить это как:

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

ИЛИ ЖЕ

var x = "path/to/script.js";
Некоторые браузеры, особенно старые версии Internet Explorer, считают, что это конец<script> пометить и прекратить обработку оставшегося кода как JavaScript.
Я пробовал этот способ с кавычками, но он не работает, не вижу сценарий, добавляемый в исходном коде. Кроме того, не понял, почему вы говорите, что нам нужно сделать это как & quot; & gt; & lt; \ / scr & quot; + & quot; ipt & gt; & quot; ? какое значение, почему мы здесь объединяемся? 1985percy

Похожие вопросы