2011-03-08 125 views
18

我有这样的代码:如何动态加载JavaScript文件?

<script type="text/javascript"> 
    function js() { 
     var getJs = document.getElementById("jogo"); 

     if (JS == true) { //if button JS is pressed - it is correct? 

      < script type = "text/javascript" 
      src = "file1.js" > 


     } else < script type = "text/javascript" 
     src = "file2.js" > 
</script> 
} 
</script> 

这是行不通的。我给了两个按钮,如果第一个按下,应该加载file1.js。如果第二个按下,则应装入file2.js

我该怎么做?

+0

你必须做一个eval – kjy112 2011-03-08 16:33:45

+0

什么你的意思是与eval?谢谢 – user455318 2011-03-08 16:35:43

+0

'if(JS == true)'dosent表示它被按下,它只是表示元素存在于DOM中,为什么不包含所有脚本,然后根据JS的存在调用适当的函数 – slier 2011-03-08 16:36:32

回答

45

你不能嵌入HTML Javascript中那样。基本上,你想要的是嵌入一个脚本元素,点击一个按钮时指向一个特定的JavaScript文件。可与事件与DOM结合来完成:

<script type="application/javascript"> 
function loadJS(file) { 
    // DOM: Create the script element 
    var jsElm = document.createElement("script"); 
    // set the type attribute 
    jsElm.type = "application/javascript"; 
    // make the script element load file 
    jsElm.src = file; 
    // finally insert the element to the body element in order to load the script 
    document.body.appendChild(jsElm); 
} 
</script> 
<button onclick="loadJS('file1.js');">Load file1.js</button> 
<button onclick="loadJS('file2.js');">Load file2.js</button> 
+0

谢谢,这是我所需要的。 – user455318 2011-03-08 16:47:33

+6

请注意,在调用“document.body.appendChild(jsElm);”后,加载的javascript文件中的函数不可用,但有jsElem.onload事件在js准备就绪时发出信号。 – pera 2015-10-12 10:41:42

+0

如何使用'document.write(unescape(“%3Cscript src ='file.js'type ='text/javascript'%3E%3C/script%3E”));' – Ithar 2016-02-24 09:27:44

8

试试这个关于大小:Dynamically Load JS

function loadjscssfile(filename){ 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("myscript.js") //dynamically load and add this .js file 
+0

你不在这个函数中使用'文件名'参数,所以它不会工作.....晚了5年评论:-)良好的链接虽然 – Ryan 2017-03-29 08:25:40

4

的JavaScript:

function loadScript(url) 
{ 
    document.body.appendChild(document.createElement("script")).src = url; 
} 
function loadDefaultScript() 
{ 
    loadScript("http://mysite.com/file1.js"); 
} 
function loadAlternateScript() 
{ 
    loadScript("http://mysite.com/file2.js"); 
} 

HTML:

<input type="button" onclick="loadAlternateScript()" value="Alternate" /> 
<input type="button" onclick="loadDefaultScript()" value="Default" /> 
+1

不要忘记设置'type'参数。 – 2011-03-08 16:49:17

+2

'type'属性在HTML5中是可选的。 – gilly3 2013-10-08 20:59:37

+5

服务器是MIME类型的权威来源。 type属性总是被忽略,而不仅仅是HTML5。包括它没有优势。这实际上是一个缺点,因为它是误导性的。 – 2014-03-08 18:33:26

0

您可以使用此功能,这将很好地工作

function loadjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
} 
else if (filetype=="css"){ //if filename is an external CSS file 
    var fileref=document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file 
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file 
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file 
+0

你可以看看这个链接:[answer](https://stackoverflow.com/questions/40808425/how-load-and-use-dynamically-javascript/45489130#45489130) – asmmahmud 2017-08-03 15:58:44

0

通过jQuery:

var getJSfile = function(src) { 
      var jsfile = $("<script type='text/javascript' src='"+src+"'>"); 
      $("head").append(jsfile); 
     }; 

    getJSfile ("home.js"); 
+0

你可以看看这个链接:[answer](https://stackoverflow.com/questions/40808425/how-load-and-use -dynamically的JavaScript/45489130#45489130) – asmmahmud 2017-08-03 15:58:23