2012-06-06 41 views
1

我想从JS文件加载另一个JS文件。Javascript来加载另一个js文件

从我的JavaScript文件run.js,我有以下几点:

document.write("<script type='text/javascript' src='my_script.js'></script>"); 
alert(nImages); 

在侧my_script.js我有以下几点:

<SCRIPT language="JavaScript" type="text/javascript"> 
<!-- 
nImages = 6; 
//--> 
</SCRIPT> 

但我不能似乎要从my_script.js文件中提醒nImages

+0

难道你需要等待,直到JS文件实际加载(除了“它不是一个HTML文件”部分)? –

回答

3

您不应该在脚本文件中使用HTML。你的脚本文件my_script.js应该只有它。

nImages = 6; 

附加说明:你不需要language="JavaScript"<!--//-->。这些都是现代浏览器所不需要的旧惯例(甚至IE6)。我也避免在你的JS中使用document.write(),因为它有性能影响。您可能需要查看一个库,例如RequireJS,它提供了一种更好的方法来加载页面中的其他JS文件。

我也有一个code snippet on Github受Steve Souders启发,通过直接JS加载另一个文件。

var theOtherScript = 'http://example.com/js/script.js'; 

var el = document.createElement('script'); 
el.async = false; 
el.src = theOtherScript; 
el.type = 'text/javascript'; 

(document.getElementsByTagName('HEAD')[0]||document.body).appendChild(el); 

这会将另一个脚本追加到元素(如果存在)或页面。

+0

不幸的是,仍然不能解决它,但这是问题的一部分。 – Paulpro

+0

它在技术上也应该在脑袋里 – Jay

+0

@Jay应该是什么,为什么? –

0

Javascript文件中不应该有HTML。他们应该完全的Javascript代码组成,so my_script.js应该只包含:

nImages = 6; 

这仍然是行不通的,因为当你写了新的脚本到文档中它不会立即运行。确保run.jsmy_script.js开始之前完成运行,因此nImages在警报时未定义,然后在稍后变为6时。你会看到,这个作品:

document.write("<script type='text/javascript' src='my_script.js'></script>"); 

function call_on_load(){ 
    alert(nImages); 
} 

如果my_script.js内容是:

nImages = 6; 
call_on_load(); 

编辑

既然你在一个评论说,你不能编辑my_script.js你可以尽管它不是一个很好的解决方案:

// Force nImages to be undefined 
var undefined; 
window.nImages = undefined; 

document.write("<script type='text/javascript' src='my_script.js'></script>"); 

(function is_loaded(cb){ 
    if(typeof window.nImages == 'undefined') 
     setTimeout(function(){ is_loaded(cb); }, 100); 
    else 
     cb(); 
})(function(){ 
    // This is executed after the script has loaded 
    alert(nImages); 
}); 

但是,这不是一个好的解决方案,因为如果在加载脚本时出现错误,它将无限期地继续轮询。

编辑

您的评论发布它具有<SCRIPT顶部要包含的文件。这个文件是无用的,你无法对它做任何关于客户端的事情。您必须编写一个服务器端脚本来将文件加载为文本,在这种情况下,您可以将其解析为所需的值。

4

你可以这样做:

var script = document.createElement('script'); 
script.src = 'my_script.js'; 
script.type = 'text/javascript'; 

script.onload = function() { 
    alert(nImages); 
}; 

document.getElementsByTagName('head')[0].appendChild(script); 
相关问题