[英]setTimeout not working in Chrome
这个问题是针对同事的。 他在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',它会导致用户的默认邮件客户端打开,而不是要重定向的页面。
window.location = emailContent;
一旦命中此行,这将重定向浏览器。
根据我的经验,不要使用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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.