Javascript setTimeout()和窗口函数

时间:2011-08-20 19:19:48

标签: javascript google-chrome resize settimeout

以下JavaScript代码在chrome中运行,导致“后台”窗口调整为我的规范:

var background;
function play () {
    var w  = screen.width;
    var h  = screen.height;
    if( !background || background.closed ) background = window.open("background.html", "It's a pop-up!", "top="+ 100 +",left="+ 770 +",width="+ w/3 +",height="+ h/3 +",location=no,menubar=no,scrollbars=no,status=no,toolbar=no,resizable=no");
    background.resizeTo(w,724);
}

但是,当我尝试延迟调整大小功能时,代码会中断。为什么调用setTimeout("background.resizeTo(w,724)",10000)没有可见结果?

2 个答案:

答案 0 :(得分:1)

将其更改为

setTimeout(function(){background.resizeTo(w,724);},10000);

你应该传递一个功能。这是正确的解决方案,在使用setTimeout()setInterval()时,不要依赖于将字符串作为“函数”传递,它的速度较慢,因为它必须进行评估而且不正确。

此外,您可能会遇到范围问题(例如您的示例)。只有在backgroundw 全球的情况下,您的代码才有效。我们不了解background,但w肯定只是play的本地。传递一个关闭这些变量的函数(一个闭包)而不是一个字符串,解决了这个问题。

有关它的更多信息:https://developer.mozilla.org/en/DOM/window.setTimeout#Syntax

答案 1 :(得分:-1)

因为整个陈述基本上是eval'd而w没有任何意义了。

试试这个:

setTimeout('background.resizeTo('+w+',724',10000);