setTimeout не работает в Chrome - PullRequest
       0

setTimeout не работает в Chrome

4 голосов
/ 21 марта 2012

Этот вопрос к коллеге. У него проблема в Chrome со следующим фрагментом кода:

function showEmailClient(emailContent, url, providerContactId) {
    window.location = emailContent;
    if (providerContactId != undefined) {
        setTimeout(function() {
            clientSideRedirect(url + providerContactId);
        }, 5000);
    }
    else {
        setTimeout(function() {
            clientSideRedirect(url);
        }, 5000);
    }
}​

Функции setTimeout вызываются немедленно в Chrome вместо ожидания тех пяти секунд, которые они должны. Есть идеи?

Обновление

emailContent является строкой mailto, например, 'mailto: support@somewhere.com', который вызывает открытие почтового клиента по умолчанию, а не перенаправления страницы.

Ответы [ 2 ]

5 голосов
/ 21 марта 2012
window.location = emailContent;

Это перенаправит браузер, как только эта строка будет нажата.

2 голосов
/ 21 марта 2012

По моему опыту, не используйте использование window.location для вызова почтового клиента и перенаправления на ту же страницу - это чудовище.Вместо этого используйте форму для отправки электронной почты с использованием пространства имен System.Net.Mail и объектов в нем, а затем выполните перенаправление.Если это не вариант, сохраните данные mailto в сеансе, перенаправьте и затем вызовите почтовый клиент при загрузке страницы.Единственное предостережение об этом подходе состоит в том, что window.location уничтожит все ответы, которые не были написаны, поэтому вам нужно дать странице время для загрузки с использованием события таймера, обычно около 2000 миллисекунд (если ваша страница имеет динамическийданных и имеет разное время загрузки, удачи!).

Этот фрагмент кода использует jQuery для ожидания готовности документа к использованию и добавляет 2000 миллисекунд для обеспечения написания любых ответов.

function showEmailClient(mailto)
{
    $(document).ready(function ()
    {
        setTimeout(function ()
        {
            window.location = mailto;
        }, 2000);               
    });
}

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["SendMail"] != null)
    {
        var mailto = Session["SendMail"].ToString();
        ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "ShowEmailClient", "showEmailClient('" + mailto + "');", true);
        Session["SendMail"] = null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...