Script won't execute location.href

Script won't execute location.href

本文关键字:execute location href won Script      更新时间:2023-09-26

我的脚本发生了一些奇怪的事情,我不知道为什么它失败了。[edit]我解决了这个问题,但是仍然需要一个为什么会发生这种情况的答案。

脚本如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='Content-Type'content='text/html;charset=utf-8'>
<noscript>
    <meta http-equiv="refresh" content="0;URL=<?php echo $err_uri;?>"/>
</noscript>
<script>
function e_fout(y,z){
    if(typeof tpag=='undefined')tpag='100';
    if(typeof y=='undefined')y='999';
    if(typeof z=='undefined')z='0';z=tpag+','+y+','+z;
      // NAME: URL 1
    var url=[window.top.location.protocol, '//',window.top.location.host, window.top.location.pathname,'error/?e='+z].join('');
    window.location.href=url;
      return false;
      }
function go_test(){
      // NAME: URL 2
    var url=[window.top.location.protocol,'//',window.top.location.host, window.top.location.pathname, 'mytest/test.php'].join('');
    alert(url);  //<== FOR TEST PURPOSE (3)
    window.location.href=url;
      return false;
    }
var gst=<?php echo ($go_test===true)?9:1;?>;
alert(gst); //<== FOR TEST PURPOSE (2)
if(gst===9){
     go_test();
     }
// *********************
alert('I'M STILL HERE...')  //<== FOR TEST PURPOSE (3)
if(glo!==9){e_fout(1,119);}
</script>
</head>

:如果我运行这个脚本,它在Firefox中工作得非常好。它调用函数go_test(),给出警报12。然后页面被重定向到URL 2

在IE, Chrome和Safari,然而,它不工作。它给我警报12,显示正确的URL 2,但它不是重定向页面。它继续警告3,然后调用函数e_fout(),重定向到URL 1

  • 如果if(glo!==9){e_fout(1,119);}行被注释掉,我被重定向到正确的URL 2
  • 如果//*********</script><script>取代,它在IE和Safari中工作正确,但仍然不在Chrome中

有没有人知道为什么会发生这种情况以及如何修复它?

我解决了问题,但仍然不知道为什么会这样。我的解决方案是将if() statements包装在一个函数中,将return false添加到所有语句中,并在<head>部分的末尾调用该函数。现在它在所有浏览器中都按预期执行。

var gst=<?php echo ($go_test===true)?9:1;?>;
function start(){
    if(gst===9){
        alert(gst); //<== FOR TEST PURPOSE (2)
        go_test();
        return false;
        }
    elseif(glo!==9){
        e_fout(1,119);
        return false;
        }
    alert('I'M STILL HERE...')  //<== FOR TEST PURPOSE (3)
}
start();
</script>
</head>

尝试在不同的请求之间使用setTimeout。可能没有足够的时间打开第一页。

setTimeout(function(){ 
    alert('hello');
}, 3000);