【问题标题】:window.focus() of JavaScript not working on IE9JavaScript 的 window.focus() 不能在 IE9 上运行
【发布时间】:2011-08-04 14:36:17
【问题描述】:

这是我的代码

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 上设置新窗口的焦点?

【问题讨论】:

  • 请不要编辑标语或“谢谢(提前)”类型的消息。
  • 因为他们在这里不被接受所以 - stackoverflow.com/faq#signatures - 谢谢,类似的结尾被认为是签名的一部分。
  • 这个链接没有提到谢谢等,还有什么不接受谢谢卡尔森先生?
  • 这篇元帖子 - meta.stackexchange.com/questions/2950/… - 询问感谢,杰夫阿特伍德提到这些更难检测,元的其他地方有讨论指出如果它不是问题的一部分描述,当涉及到开头和结尾时,它不应该在那里。所以像“嗨”和“谢谢”这样的词是不被接受的。
  • 对不起,这不是公开辩论,我不会寻找地方来证明这一点,meta上有关于这个的帖子。如果你想把它当作一场严肃的辩论,发到 meta 上,除了这个讨论已经结束了。

标签: c# javascript asp.net internet-explorer-9


【解决方案1】:

我遇到过类似的问题,这似乎是因为在 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 秒的延迟,这可能有点过头了。

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

【讨论】:

    【解决方案2】:

    在看似永恒之后,我的同事想出了一种方法让它为我们工作。

    还有其他关于问题本身的参考,http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/a250c431-9f09-441c-9b78-af067233ed78http://support.microsoft.com/kb/979954

    也就是说,我们只是将 window.focus() 放在新(弹出)页面的 body 标记中。

    <body onload="FocusWindow()">
    

    在单独的.js文件中定义FocusWindow()如下,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多