这个问题适用于同事。他在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'导致用户的默认邮件客户端打开,而不是要重定向的页面。
答案 0 :(得分:5)
window.location = emailContent;
一旦此行被击中,这将重定向浏览器。
答案 1 :(得分:2)
根据我的经验,不要使用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;
}
}