以下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)
没有可见结果?
答案 0 :(得分:1)
将其更改为
setTimeout(function(){background.resizeTo(w,724);},10000);
你应该传递一个功能。这是正确的解决方案,在使用setTimeout()
或setInterval()
时,不要依赖于将字符串作为“函数”传递,它的速度较慢,因为它必须进行评估而且不正确。
此外,您可能会遇到范围问题(例如您的示例)。只有在background
和w
全球的情况下,您的代码才有效。我们不了解background
,但w
肯定只是play
的本地。传递一个关闭这些变量的函数(一个闭包)而不是一个字符串,解决了这个问题。
有关它的更多信息:https://developer.mozilla.org/en/DOM/window.setTimeout#Syntax
答案 1 :(得分:-1)
因为整个陈述基本上是eval'd而w没有任何意义了。
试试这个:
setTimeout('background.resizeTo('+w+',724',10000);