使用 JS 变量设置 <script> 标签的 src 属性

Posted

技术标签:

【中文标题】使用 JS 变量设置 <script> 标签的 src 属性【英文标题】:Use JS variable to set the src attribute for <script> tag 【发布时间】:2012-06-24 09:51:34 【问题描述】:

我想使用一个 javascript 变量作为同一个 jsp 上另一个标签的“src”属性。

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

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

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

在搜索各种论坛时,我尝试使用以下选项,但它们似乎不起作用。我希望这个东西可以在所有主流浏览器上运行。

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

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

    在第一个元素中使用文档写入方法。

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

    试图在第一个元素中设置一个 JSTL 变量并使用它。

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

这些方法都没有成功。对出了什么问题有什么建议吗?

【问题讨论】:

有一个流行的脚本加载实用程序,叫做 require.js。它通过使同步调用异步来优化脚本加载和依赖关系。这可能很有趣。 如果您得到答案,您应该接受其中一种解决方案。 :) 或提供您认为有用的答案。 【参考方案1】:

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

代码很好.. :)

【讨论】:

如果我需要加载多个 js 文件怎么办。是否有特定的语法,还是我必须循环整个脚本?谢谢!! 循环整个脚本。您编写的任何代码基本上都会这样做。抱歉回复晚了。 我试过了,它可以工作,但不如预期。在我的情况下,源脚本只是一个长文本变量、照片列表等,但是当在常驻脚本中调用该变量时,该变量为空……除非……我在其中插入一个“警报”语句。似乎必须在变量获取字符串之前触发一些事件。有什么想法吗?我在此处发布了问题 (***.com/questions/54583628/…),但所有回复都是关于离题的问题。【参考方案2】:

我使用类似于选择二的东西。您的代码中有一个小错误,因为“google.com”需要用引号括起来。

为了提高兼容性,你可能想把它写成:

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,认为这是 &lt;script&gt; 标记的结尾,并停止将剩余代码作为 JavaScript 处理。【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

试试:

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

这是做什么的:

    找到页面上的第一个脚本元素 使用您提供的源创建一个新的脚本元素。 然后在第一个现有脚本元素之前插入该新元素。

【讨论】:

【参考方案5】:
<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. -->

【讨论】:

以上是关于使用 JS 变量设置 <script> 标签的 src 属性的主要内容,如果未能解决你的问题,请参考以下文章

将HTML背景颜色设置为JS变量

Javacript的变量和输出

js基础

11.15

6.4 JavaScript

JS中的变量和输入输出