这是我的代码

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后,我想做的是打开仪表盘.aspx并对其设置焦点。此代码打开dashboard.aspx并在Google Chrome和Mozilla Firefox 4中设置焦点。但是,当我在IE9仪表板上尝试时。 aspx已打开,但焦点不起作用,dashboard.aspx仍保留在登录页面下。

如何将焦点放在IE9的新窗口上?

最佳答案

我有一个类似的问题,这似乎是因为在IE9(和任何IE)中,在呈现窗口之前运行focus()方法。

为了解决这个问题,我可以通过两种方法解决此问题:


设置一个计时器,以在少量时间后加载焦点。
推迟读取JavaScript,直到完全渲染窗口为止。


对我来说,timer方法不是我的首选,因为我个人认为这很麻烦,如果页面的加载时间比timer更长,那么您将遇到同样的问题。要实现计时器,您可以使用类似以下内容的方法:

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秒,这可能会过大。

我认为首选defer方法,因为我觉得它更干净,更简单,但它可能会或可能不会起作用:

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>");

关于c# - JavaScript的window.focus()在IE9上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6943367/

10-12 12:57