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