2012-03-21 28 views
4

この質問は、同僚のためのものです。彼は、次のコードスニペットでChromeの問題を持っている:ChromeでsetTimeoutが機能しない

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で即座に呼び出される代わりに、彼らがすることになっている5秒間待っなっています。何か案は?

更新

emailContentは、例えば、mailtoの文字列であります'mailto:[email protected]'は、リダイレクト先のページではなく、ユーザーのデフォルトのメールクライアントを開きます。

+0

コンソールにエラーメッセージがありますか? –

+0

おもちゃは何をしようとしていますか?あなたはリダイレクトしています...私はこれがすべてのブラウザで同じように起こると信じています。 – gdoron

+0

私のために働いています:http://jsfiddle.net/Vy7cr/ –

答えて

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; 
    } 
} 
5
window.location = emailContent; 

これは、この行がヒットするとすぐにブラウザをリダイレクトします。

+2

AlexはemailContentがmailto文字列であり、ページリダイレクトをしていないことを忘れていました。 – Halcyon

+0

@ハルシオン:まあ、それは私が持っているすべてです。私はこのコードを自分でテストしましたが、うまくいきました。 http://jsfiddle.net/Vy7cr/ –

+0

それは私のために働いています(http://jsfiddle.net/3XmVC/1/)。この質問は同僚のためのものです。トロイ、もう情報がありますか? – Chev

関連する問題