alert()后的重定向不起作用

时间:2014-05-21 14:19:24

标签: javascript animation

我有以下功能,

Render: function (level, cpi, t1)
{
    //...
        if ((level.t0.value -= (t1 - this.t0) / 1000) <= 0) {
            alert("Game over!");

            window.location.href = "levels.php";
        }
    //...
}

通过

进行了大量调用
(function frame ()
{
    //...
        Level.Render(level, cpi, Date.now());
    //...
    requestAnimationFrame(frame);
})();

如果第二个陈述变为真,则会显示对话框,如果我点击&#34;确定&#34;,它会再次出现,再次出现......没有重定向,为什么?

2 个答案:

答案 0 :(得分:0)

我收到了错误:

作业中的左侧无效

这对你有用吗?

level.t0.value -= (t1 - this.t0) / 1000;
if (level.t0.value <= 0) {
    alert("Game over!");
    window.location.href = "levels.php";
}

答案 1 :(得分:0)

JavaScript代码在单个线程中执行,浏览器不会开始重新加载页面(基于新URL),直到JS完成执行(例如响应事件等)。

更糟糕的是,不同浏览器的行为方式不同。例如,下次在更改alert()后在Firefox中打开windows.location时,浏览器将获取更改并重新加载页面(并自动关闭alert()框)。另一方面,Chrome执行alert()时不会立即获取位置更改。

TL; DR :不要尝试将window.location赋值用作全局“退出”函数。如果您需要立即中断代码,可以在更改位置后抛出错误

Render: function (level, cpi, t1)
{
    //...
        if ((level.t0.value -= (t1 - this.t0) / 1000) <= 0) {
            alert("Game over!");

            window.location.href = "levels.php";
            throw("Done");
        }
    //...
}