我试图为我的同事创建一个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>
答案 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(){})
文档加载时将调用这些函数中的任何一个。