Javascript:使用while循环等待文档加载不起作用
问题描述:
我试图为我的同事创建一个html文档来完成在线测试(我有正确的答案)。当文档加载时,它会请求您的用户和密码并尝试登录,然后填写答案并提交。Javascript:使用while循环等待文档加载不起作用
但是我无法通过用户名和密码值,在页面中的元素,这是错误:
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>
答
你不应该使用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();
});
答
你不能这样做,在javascript:
while(true){if(document.readyState == "complete"){ break; }}
它永远不会退出这一事件框架。
使用window.onload = function(){}
或$(document).ready(function(){})
所有这些功能将被调用时加载文档。
您无法与其他网页上的内容进行互动,就像您正在尝试的那样。当您更改“位置”并开始导航时,在下一页加载之前,当前页面的内容(包括其中的所有JavaScript)被删除。如果您想模仿用户,请查看[无头浏览器](https://en.wikipedia.org/wiki/Headless_browser)。 –