【问题标题】:setTimeout not working in ChromesetTimeout 在 Chrome 中不起作用
【发布时间】:2012-03-21 17:03:35
【问题描述】:

这个问题是给同事的。他在 Chrome 中遇到了以下代码 sn-p 的问题:

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' 会导致打开用户的默认邮件客户端,而不是重定向页面。

【问题讨论】:

  • 控制台上有任何错误信息吗?
  • 玩具想做什么?您正在重定向...我相信这将在所有浏览器中发生相同的情况。
  • 为我工作:jsfiddle.net/Vy7cr
  • 您确定对 clientSideRedirect 的立即调用发生在此函数中,而不是其他地方吗?

标签: javascript jquery html google-chrome webkit


【解决方案1】:
window.location = emailContent;

这将在点击此行后立即重定向浏览器。

【讨论】:

  • Alex 忘了说 emailContent 是一个 mailto 字符串,不做页面重定向。
  • @Halcyon:嗯,这就是我的全部。我自己测试了这段代码,它运行良好。 jsfiddle.net/Vy7cr
  • 它也对我有用 (jsfiddle.net/3XmVC/1)。这个问题是给同事的。特洛伊,你有更多信息吗?
  • 是的,就是这样——它在孤立的环境中工作得很好,但在开发环境中却失败了。我也想不通!
【解决方案2】:

根据我的经验,不要使用 window.location 来调出电子邮件客户端并在同一页面上进行重定向 - 这是一个野兽。相反,使用 System.Net.Mail 命名空间和其中的对象使用表单提交电子邮件,然后进行重定向。如果这不是一个选项,请将 mailto 数据存储在会话中,重定向,然后在页面加载时调用邮件客户端。关于这种方法的唯一警告是 window.location 将杀死任何尚未写入的响应,因此您需要使用通常大约 2000 毫秒的计时器事件给页面一些时间来加载(如果您的页面具有动态数据并且有不同的加载时间,祝你好运!)。

这段代码 sn-p 使用 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多