为什么document.write()在Firefox和chrome中的行为有所不同?

时间:2014-08-20 06:23:56

标签: javascript html google-chrome firefox redirect

我正在创建一个简单的重定向脚本,该脚本会在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>

控制台错误消息

  1. Firefox - 无
  2. Chrome - 无

  3. 输出

    1. Firefox(永远):

      Welcome <name>
      
      You are being redirected in 3 seconds 
      
    2.   
      1. 铬:

        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
        
      2. 感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您应该只使用document.write()在加载文档时动态插入内容。

根据MDN's doc

  

写入已加载但未调用document.open()的文档会自动执行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之前将解决问题。

Demo

另见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);
                 }

    }