2013-07-17 3 views
-1

Код:setTimeout window.open не ждет, как я могу это решить?

function overlay() { 
    el = document.getElementById("overlay"); 
    el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible"; 
} 

function win_open(URL) { 
    window.open(URL, "_blank"); 
} 

function link_redirect(linkaddress) { 
    // display message 
    { 
    overlay(); 

    setTimeout(function() {overlay(); 
    }, 2000); 

    setTimeout(win_open(linkaddress), 2000); 
    } 

    //return false; 
} 

Проблема заключается в том, что окно открывается, но нет никакой задержки. Я также пробовал:

setTimeout(function() {win_open(linkaddress);}, 2000); 

но нет.

Что я хочу достичь, так это то, что при запуске link_redirect(linkaddress) он сразу отображает наложение, ждет 2 секунды, скрывает оверлей и отображает окно с заданного URL-адреса в _blank.

+3

«[Спешите]» - О Rly? Нет, вопрос о «переполнении стека» не является «срочным». Если бы это было так, вы бы сами решили ее решить. –

+0

Я обнаружил поистине чудесное решение этого, которое [Hurry] tag слишком оскорбительно для ответа. – Mics

+0

'setTimeout (function() {window.open()}, 20000);' Это работает для меня в Firebug .. – Pawan

ответ

3

Проблема заключается в вашем втором setTimeout вызова, вы вызываете функцию win_open затем передать значение, возвращаемое она setTimeout в качестве обратного вызова

Вам нужно

function link_redirect(linkaddress) { 
    overlay(); 

    setTimeout(function() { 
     overlay(); 
     win_open(linkaddress) 
    }, 2000); 
    //return false; 
} 
+0

Да, это в основном устраняет второй setTimeout(), но по какой-то причине, когда win_open (linkaddress) запущен, как вы его написали, он не будет запускаться. Триггеры overlay() в вашем примере, но win_open (linkaddress не будет). –

+0

Похоже, что аргумент не передается win_open(). –

+0

Кажется, что он работает в Firefox, но не в Safari. –

Смежные вопросы