使用JS变量为<script>标记</script>设置src属性

时间:2012-06-22 04:57:38

标签: javascript jsp jsp-tags

我想将javascript变量用作同一jsp上另一个标记的'src'属性。

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

我想创建这个新元素,如下所示。

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

在搜索各种论坛时,我尝试使用以下选项,但它们似乎无法正常工作。我希望这个东西适用于所有主流浏览器。

  1. 将此代码放在第一个元素中。

    var script   = document.createElement("script");
    script.type  = "text/javascript";
    script.src   = "path/to/somelink";
    document.body.appendChild(script);
    
  2. 在第一个元素中使用文档写入方法。

    document.write("<script type='text/javascript' src="+ google.com + "><\/script>");
    
  3. 尝试在第一个元素中设置JSTL变量并使用它。

    <c:set var="URL" value="mylink"/>
    
  4. 这些方法都没有成功。关于出了什么问题的任何建议?

5 个答案:

答案 0 :(得分:14)

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

代码很好.. :))

答案 1 :(得分:5)

我使用与选择二类似的东西。您的代码中存在轻微错误,因为“google.com”需要用引号括起来。

为了提高兼容性,您可能希望将其编写为:

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

在这种情况下,x将是要包含的文件。您可以将其定义为:

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

OR

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

答案 2 :(得分:4)

你能使用jQuery吗?如果是这样,您可以使用getScript()

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

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

答案 3 :(得分: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. 在页面上找到第一个脚本元素
  2. 使用您提供的来源创建新的脚本元素。
  3. 然后在第一个现有脚本元素之前插入新元素。

答案 4 :(得分: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. -->