簡體   English   中英

使用另一個JavaScript文件中的javascript文件中聲明的全局變量

[英]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: ""
};

您正在嘗試使用尚未加載的TestServerTestService設置一個屬性,因為您沒有為新添加的腳本加載時間

由於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.jsTestService.js之前執行。 因此,我建議您更改訪問全局變量交叉文件的方式。

您可以添加TestServer.js之前到您的HTML TestService.js ,這樣他們就可以執行一個接一個。

無論如何,不​​建議這樣做,您可以將它們包裝在自己的名稱空間中。 另外,您最好在使用前檢查要使用交叉文件的變量是否未定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM