[英]Use global variables declared in a javascript file in another javascript file
我正在尝试获取TestService.Server.WWW_SERVER_URL,但是TestService.Server未定义。 当我调用test1()时,它运行良好。 但是我无法访问对象文字TestServer。 有其他方法吗?
test.html
<script type="text/javascript" language="javascript" src="TestService.js"></script>
<script type="text/javascript" language="javascript">
function test() {
alert("TestService.Server.WWW_SERVER_URL[" + TestService.Server.WWW_SERVER_URL + "]");
//test1();
}
</script>
TestService.js
document.write("<scr" + "ipt type='text/javascript' src='TestServer.js'><" + "/scr" + "ipt>");
var TestService = {
Server: TestServer,
Delimiter: ""
};
function test1() {
test2();
}
TestServer.js
var TestServer = {
WWW_SERVER_URL: "http://www.test.com"
};
function test2() {
alert("test2 has been called!");
}
您在TestService.js中有这个
document.write("<scr" + "ipt type='text/javascript' src='TestServer.js'><" + "/scr" + "ipt>");
var TestService = {
Server: TestServer,
Delimiter: ""
};
您正在尝试使用尚未加载的TestServer
在TestService
设置一个属性,因为您没有为新添加的脚本加载时间
由于TestServer
不存在,因此TestService.Server
评估结果为undefined
设置一个onload函数,该函数将添加您的脚本,然后在加载时设置TestService.Server变量
var TestService = {
Server: null,
Delimiter: ""
};
function test1() {
test2();
}
window.onload = function() {
var head = document.querySelector("head");
var script = document.createElement("script");
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "TestServer.js");
head.addEventListener("load", function(event) {
if (event.target.nodeName === "SCRIPT"){
TestService.Server = TestServer;
}
}, true);
head.appendChild(script);
}
如果您动态附加脚本,则IE,Firefox和Chrome都将以异步方式下载脚本。
Firefox和Chrome将等待所有异步请求返回,然后按照脚本在DOM中附加的顺序执行脚本,而IE则按照通过有线返回的顺序执行脚本。
就您而言,您无法保证TestServer.js
在TestService.js
之前执行。 因此,我建议您更改访问全局变量交叉文件的方式。
您可以添加TestServer.js
之前到您的HTML TestService.js
,这样他们就可以执行一个接一个。
无论如何,不建议这样做,您可以将它们包装在自己的名称空间中。 另外,您最好在使用前检查要使用交叉文件的变量是否未定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.