加载另一个JavaScript文件并访问var

时间:2016-05-23 17:26:26

标签: javascript html

我正在上学,我正在网上购买游戏,我可以使用HTML,CSS和JS,所以每个游戏都有一个带有信息的JS文件,这里是一个例如:

 /*doom.js*/
 var info = {
  title  : "doom",
  price : "59.99",
  off  : "0%"
};

我的html页面就是那个:

<html>
<head>
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="games/functions.js"></script>

</head>
<body>
        <label id="title"></label>
</body>
</html>

我的所有游戏都有这个页面,所以我使用GET方法来了解我需要阅读的文件。 (game.html?ID =末日)

我有这个代码来获取id并加载文件:

window.onload = function() {
    id = getURLParameter('id');
    loadGamefile("games/"+id+".js");
};

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function loadGamefile(filename){
    var fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript")
    fileref.setAttribute("src", filename)
            
    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref);

    loadinformation();
}

function loadinformation(){ 
    document.getElementById("title").innerHTML = info.title; //info.title is from the doom.js file
}

唯一的问题是他没有更改标签,但如果我在btml代码上放一个按钮并onclick我说它的loadinformation()他加载正常,但我想在页面加载时自动,这里是错误我从控制台获得:functions.js:22 Uncaught ReferenceError: info is not defined,我想也许是因为浏览器没有时间加载文件,我不知道,有人能帮帮我吗?谢谢,抱歉我的英语。

1 个答案:

答案 0 :(得分:2)

问题是您没有给浏览器解析新脚本的机会。您可以使用setTimeout给它一点时间。

function loadGamefile(filename) {
    // your other code goes here

    setTimeout(function() {
        loadinformation();
    }, 500); // wait half of a second
}

理想情况下,您应该将数据存储在JSON文件中,然后使用AJAX加载它。有很多教程介绍了如何通过AJAX加载JSON。

正如@Bergi指出的那样,这个解决方案非常脆弱,并且依赖于500ms以下的脚本加载。相反,您可以listen for the load event确保您在脚本准备就绪后立即使用该脚本。

function loadGamefile(filename) {
    var fileref=document.createElement('script')
    fileref.setAttribute("type","text/javascript")
    fileref.setAttribute("src", filename)

    if (typeof fileref!="undefined")
        document.getElementsByTagName("head")[0].appendChild(fileref);

    // Wait for the script to load
    fileref.onload = function() {
        loadinformation();
    };
}