Javascript加载另一个js文件

时间:2012-06-06 00:33:15

标签: javascript

我正在尝试从JS文件加载另一个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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);

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

答案 2 :(得分: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位于顶部。这个文件没用,你不能对客户端做任何事情。您必须编写服务器端脚本以将文件作为文本加载,在这种情况下,您只需解析它所需的值。