window.focus () JavaScript не работает на IE9 - PullRequest
1 голос
/ 04 августа 2011

Это мой код

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ş";
        }
    }

У меня нет проблем с ним, кроме части JavaScript.

Я пытаюсь сделать это после нажатия LoginButton, открывающего dashboard.aspx иустановить фокус на нем. И этот код открывает dashboard.aspx и устанавливает фокус в Google Chrome и Mozilla Firefox 4. Однако, когда я пробую его в IE9, открывается dashboard.aspx, но фокус не работает, и dashboard.aspx остается под страницей входа.

Как установить фокус на новом окне IE9?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2013

После того, что казалось вечностью, мой коллега нашел способ заставить его работать на нас.

Есть и другие ссылки на саму проблему, http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/a250c431-9f09-441c-9b78-af067233ed78 http://support.microsoft.com/kb/979954

При этом мы просто помещаем window.focus () в тег body новой (всплывающей) страницы.

<body onload="FocusWindow()">

Определил FocusWindow () в отдельном файле .js следующим образом:

function FocusWindow() {
    window.focus();
}
2 голосов
/ 04 августа 2011

У меня была похожая проблема с этим, и, похоже, это произошло потому, что в IE9 (и в любом IE) метод focus () запускается до отображения окна.

Чтобы обойти это, естьЭто можно исправить двумя способами:

  1. Установить таймер для загрузки фокуса через небольшой промежуток времени.
  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>");
...