2011-08-04 4 views
1

に取り組んでいないこれは私がJavaScriptの一部を除いてそれで問題がない私のコードwindow.focus()のJavaScriptのIE9

protected void LoginButton_Click(object sender, EventArgs e) 
    { 
     if (DAL.DAOKullanici.Login(KullaniciTextBox.Text,SifreTextBox.Text)) 
     { 
      VeriyazPROTicari.Sessionlar.Variables.loginkontrol = true; 

      Session["kullaniciAdi"] = KullaniciTextBox.Text; 
      Session["kullaniciId"] = DAL.DAOKullanici.GetEntity(DAL.DAOKullanici.KullaniciAdiIleKullaniciIdCek(KullaniciTextBox.Text)).ID; 

      bool main_window_open = false; 

      if (!main_window_open) 
      { 
       Page.RegisterClientScriptBlock("Main_Window", "<script>" + 
       "var newwindow; " + 
       "newwindow = window.open('" + "/dashboard/dashboard.aspx" + "', 'main_app_window', ' toolbar=0,location=0,directories=0,status=1,menubar=0,left=1,top=1,scrollbars=" + "1" + ",resizable=1,width=" + "1280" + ",height=" + "800" + "'); " + 
       "if (window.focus) " + 
       "{newwindow.focus();} " 
       + "</script>"); 

       main_window_open = true; 


      } 
      HataLabel.Text = ""; 
     } 
     else 
     { 
      HataLabel.Text="Hatalı Giriş"; 
     } 
    } 

です。

LoginButtonの後にdashboard.aspxを開いてフォーカスを設定すると、このコードはdashboard.aspxを開き、Google ChromeとMozilla Firefox 4にフォーカスを設定します。ただし、IE9で試してみるとdashboard.aspxは開かれていますが、フォーカスは機能せず、dashboard.aspxはログインページの下に残ります。

IE9の新しいウィンドウにフォーカスを設定するにはどうすればよいですか?

+1

キャッチフレーズに編集したり、タイプのメッセージを "(事前に)ありがとう" しないでください。 –

+0

カールセン氏はなぜですか? – Bastardo

+1

これはSOには受け入れられていないからです - http://stackoverflow.com/faq#signatures - ありがとう、類似のエンディングはシグネチャの一部とみなされます。 –

答えて

2

私はこれに似た問題を抱えていました。IE9(とIE)では、ウィンドウがレンダリングされる前にfocus()メソッドが実行されるために起こったようです。時間少量の後にフォーカスをロードするようにタイマーを設定

  1. :私はこの問題を解決します見ることができる2つの方法があります。このラウンドを取得するには

  2. ウィンドウが完全にレンダリングされるまで、JavaScriptが読み込まれないようにします。それは厄介で、ページがタイマーよりもロードに時間がかかります場合は、同じ問題で立ち往生している私の個人的な見解のよう

私にタイマー方法は、私の好ましい選択ではありません。

Page.RegisterClientScriptBlock("Main_Window", "<script>" + 
    "setTimeout(function() { " + 
    "var newwindow; " + 
    "newwindow = window.open('" + "/dashboard/dashboard.aspx" + "', 'main_app_window', ' toolbar=0,location=0,directories=0,status=1,menubar=0,left=1,top=1,scrollbars=" + "1" + ",resizable=1,width=" + "1280" + ",height=" + "800" + "'); " + 
    "if (window.focus) " + 
    "{newwindow.focus();} " + 
    "}, 5);" + 
    "</script>"); 

私はやり過ぎかもしれ5秒の遅延を設定している:タイマーを実装するには、あなたのようなものを使用することができます。私はそれがクリーンで簡単です感じるよう

延期法が私の好ましい選択ですが、それがまたは動作しない場合があります。

Page.RegisterClientScriptBlock("Main_Window", "<script type="text/javascript" defer="defer">" + 
    "var newwindow; " + 
    "newwindow = window.open('" + "/dashboard/dashboard.aspx" + "', 'main_app_window', ' toolbar=0,location=0,directories=0,status=1,menubar=0,left=1,top=1,scrollbars=" + "1" + ",resizable=1,width=" + "1280" + ",height=" + "800" + "'); " + 
    "if (window.focus) " + 
    "{newwindow.focus();} " 
    + "</script>"); 
+1

素晴らしい回答ありがとうございます。 – Bastardo

2

を永遠のように思えた何をした後、私の同僚は、作るための方法を考え出しましたそれは私たちのために働く。

は、我々は単に新しい(ポップアップ)ページのbodyタグにwindow.focus()を入れ、http://support.microsoft.com/kb/979954

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/a250c431-9f09-441c-9b78-af067233ed78が言ったこと、問題自体への他の参照があります。別の.jsファイル内

<body onload="FocusWindow()"> 

定義FocusWindow()以下のように、

function FocusWindow() { 
    window.focus(); 
}