2

我正在尝试从 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>

但我似乎无法让它提醒nImagesfrom my_script.js文件。

4

3 回答 3

5

你可以这样做:

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);
于 2012-06-06T02:20:01.810 回答
3

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

nImages = 6;

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

我在 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);

这会将其他脚本附加到元素(如果存在)或页面的元素。

于 2012-06-06T00:35:49.043 回答
0

Javascript 文件中不应包含 HTML。它们应完全由 Javascript 代码组成,so my_script.js应仅包含:

nImages = 6;

这仍然不起作用,因为当您将新的脚本标签写入文档时,它不会立即运行。保证在开run.js​​始之前完成运行my_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位于顶部。这个文件没用,你不能在客户端做任何事情。您必须编写一个服务器端脚本来将文件作为文本加载,在这种情况下,您可以将其解析为您想要的值。

于 2012-06-06T00:38:17.477 回答