我正在创建一个简单的重定向脚本,该脚本会在5秒后将用户重定向到2.html
。
当我在Chrome上测试脚本并且它可以正常工作时!但是在最新的Firefox中,但它并没有减少秒数并挂起。
我是初学者并且已经尽力了解但我无法解决这个问题,我在网上看了但是找不到解决方案。我该如何解决这个问题?
我的代码:
的index.html:
<html>
<head>
<title>My First Page</title>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<input type="button" value=" YES " onclick="yes()" />
</body>
</html>
的script.js:
c=5;
function yes() {
alert("Right");
var ans=0;
while(ans==0){
var x=prompt("Your Name?");
var ans=confirm("Your Name is "+x+" right?");
}
document.write('<h1>Welcome '+x+' </h1><p id="show">You are being redirected in 3 seconds</p>');
function updateShow(){
document.getElementById('show').innerHTML="<h1>You are being redirected in "+c+" seconds</h1>";
c=c-1;
if(c<0){
document.location='2.html';
}
else{
setTimeout(function(){ updateShow(); },1000);
}
}
var iAmTimer= setTimeout(function(){ updateShow(); },1000);
}
2.HTML:
<html>
<body>
<h1>Welcome</h1>
</body>
</html>
控制台错误消息
输出:
Firefox(永远):
Welcome <name>
You are being redirected in 3 seconds
铬:
Welcome <name>
You are being redirected in 3 seconds
Welcome <name>
You are being redirected in 2 seconds
Welcome <name>
You are being redirected in 1 seconds
Welcome <name>
You are being redirected in 0 seconds
感谢任何帮助。
答案 0 :(得分:4)
您应该只使用document.write()
在加载文档时动态插入内容。
根据MDN's doc:
写入已加载但未调用
document.open()
的文档会自动执行document.open()
来电
如果目标中存在文档,则此方法将其清除
因此,在加载文档后使用document.write()
将覆盖(或清除)您的文档。出于这些原因,using document.write()
is considered a bad practice。
使用
document.body.innerHTML+= '<h1>Welcome ' + x + ' </h1><p id="show">You are being redirected in 3 seconds</p>';
代替或将内容隐藏在HTML
之前将解决问题。
另见What are alternatives to document.write?
这对我来说是如何工作的,对我来说是个谜,恕我直言 - 它不应该。
<强>更新强>
来自DOC's:
此外,在页面加载后调用
document.open()
时会发生自动document.write()
调用,但未在W3C规范中定义。
所以它不再是神秘的,因为没有规范,不同的浏览器以不同的方式实现它。避免document.write()
的另一个原因:)
答案 1 :(得分:-1)
你在功能中使用功能。这对我有用
c=5;
function yes() {
alert("Right");
var ans=0;
while(ans==0){
var x=prompt("Your Name?");
var ans=confirm("Your Name is "+x+" right?");
}
document.write('<h1>Welcome '+x+' </h1><p id="show">You are being redirected in 3 seconds</p>');
updateShow();
var iAmTimer= setTimeout(function(){ updateShow(); },1000);
}
function updateShow(){
document.getElementById('show').innerHTML="<h1>You are being redirected in "+c+" seconds</h1>";
c=c-1;
if(c<0){
document.location='2.html';
}
else{
setTimeout(function(){ updateShow(); },1000);
}
}