Javascript setTimeout () и оконные функции - PullRequest
0 голосов
/ 20 августа 2011

Следующий код 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 ]

1 голос
/ 20 августа 2011

Измените его на

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

Вы должны передать функцию.Это правильное решение, никогда не полагайтесь на передачу строки как «функции» при использовании setTimeout() или setInterval(), это медленнее, потому что его нужно оценивать, и это просто неправильно.

Кроме того, у вас могут быть проблемы с областью действия (как в вашем примере).Ваш код будет работать только если background и w global .Мы не знаем о background, но w определенно только локально к play.Передача функции, которая закрывает эти переменные ( closure ) вместо строки, решает эту проблему.

Для получения дополнительной информации об этом: https://developer.mozilla.org/en/DOM/window.setTimeout#Syntax

0 голосов
/ 20 августа 2011

Поскольку все утверждение в основном eval'd и w больше не имеет значения.

попробуйте это:

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