Javascript:使用while循环等待文件加载不起作用

时间:2015-11-14 00:29:01

标签: javascript google-chrome internet-explorer-8

我试图为我的同事创建一个html文档来完成在线测试(我有正确的答案)。加载文档时,它会请求您的用户和密码并尝试登录,然后填写答案并提交。

但是,我无法将用户和密码值传递给页面中的元素,这是错误:

Cannot set property 'value' of null

当我的脚本试图获取其元素时,页面没有完全加载,我怎么能让它工作?

<html>
<head>
    <title>BCG test</title>
    <script type="text/javascript">
        function bcg(){
            var user = prompt("Enter username: ");
            var pass = prompt("Enter password: ");
            var site = "http://app.huawei.com/bcg";

            location = site;

            while(true){
                if (document.readyState == "complete"){
                    break;
                }
            }

            var user_box = document.getElementById("uid");
            var pass_box = document.getElementById("password");
            var submit_button = document.getElementsByName("Submit")[0];

            user_box.value = user;
            pass_box.value = pass;
            submit_button.click();
        }

    </script>
</head>
<body onload = "bcg()">
    <h1>BCG TEST</h1>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

你不应该使用while(true)循环,因为它永远无限快地循环。这将导致浏览器冻结。如果您需要继续检查某些内容,请使用setInterval设置计时器。

但是,出于此目的,您似乎要等到页面加载。将代码放在此块中执行:

document.addEventListener("DOMContentLoaded", function() {
        var user_box = document.getElementById("uid");
        var pass_box = document.getElementById("password");
        var submit_button = document.getElementsByName("Submit")[0];

        user_box.value = user;
        pass_box.value = pass;
        submit_button.click();
});

答案 1 :(得分:0)

你不能在javascript中执行此操作:

while(true){if(document.readyState == "complete"){ break; }}

它永远不会退出此事件框架。

使用window.onload = function(){}$(document).ready(function(){})

文档加载时将调用这些函数中的任何一个。