[英]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.