【问题标题】:Giving a child window focus in IE8在 IE8 中赋予子窗口焦点
【发布时间】:2013-10-30 02:44:15
【问题描述】:

我正在尝试从 Javascript 函数启动弹出窗口,并使用以下调用确保它具有焦点:

window.open(popupUrl, popupName, "...").focus();

它适用于所有其他浏览器,但 IE8 将新窗口留在后台,并带有闪烁的橙色任务栏通知。显然这是 IE8 的一个特性:

http://msdn.microsoft.com/en-us/library/ms536425(VS.85).aspx

它说我应该能够通过从新页面发起 focus() 调用来聚焦窗口,但这似乎也不起作用。我尝试在页面的脚本标签和正文的 onload 中插入 window.focus() ,但没有效果。在页面加载时进行 focus() 调用,或者以其他方式启动 IE8 不会隐藏的弹出窗口,我是否遗漏了什么?

【问题讨论】:

    标签: javascript internet-explorer-8 focus


    【解决方案1】:

    由于安全问题,IE8 不允许此功能

    Windows Internet Explorer 8 及更高版本。 focus 方法不再将子窗口(例如使用 open 方法创建的窗口)带到前台。子窗口现在向用户请求焦点,通常通过闪烁标题栏。要直接将窗口带到前台,请在子窗口中添加脚本,调用其窗口对象的焦点方法

    http://msdn.microsoft.com/en-us/library/ms536425%28VS.85%29.aspx

    【讨论】:

      【解决方案2】:

      你可以试试这个。不确定它是否会起作用>

      var isIE = (navigator.appName == "Microsoft Internet Explorer");
      var hasFocus = true;
      var active_element;
      
      function setFocusEvents()   {
          active_element = document.activeElement;
          if (isIE)   {
              document.onfocusout = function() {  onWindowBlur();       }
              document.onfocusin = function()  {  onWindowFocus();     }
          }   else    {
              window.onblur = function()    { onWindowBlur();          }
              window.onfocus = function()  {  onWindowFocus();       }
          }
      }
      
      function onWindowFocus()    {
          hasFocus = true;
      }
      
      function onWindowBlur() {
          if (active_element != document.activeElement) {
              active_element = document.activeElement;
              return;
          }
          hasFocus = false;
      }
      

      【讨论】:

        【解决方案3】:

        是的,我目前也无法在 IE8 上进行测试,但可以使用这个 document.ready 方法而不是 body.onload:

        test1.html:

        <html>
            <head>
                <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
                <script type="text/javascript"> 
                    function openNewWindow()
                    {
                        window.open("test2.html", null, "height=200, width=200");
                    }
                </script>
            </head>
            <body>                        
                <a onclick="openNewWindow()">Open</a>
           </body>
        </html>
        

        test2.html:

        <html>
            <head>
                <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
                <script type="text/javascript"> 
                    $(document).ready(function(){ window.focus(); });
                </script>
            </head>
            <body>
                <div id="container" style="background:blue;height:200px;width:300px">
                </div>
           </body>
        </html>
        

        【讨论】:

          【解决方案4】:

          我发现了问题所在——原来在 onload 中运行 window.focus() 的原因是因为第一个 window.open().focus() 调用导致它开始在后台闪烁,之后任何后续的焦点调用都将不起作用。如果我不尝试从调用窗口聚焦它,而只从弹出窗口聚焦它,它通常会出现在前面。多么烦人的“功能”……

          【讨论】:

            【解决方案5】:

            问题是Window.focus 方法在 Internet Explorer 8 (IE 8) 中不起作用。它不是弹出窗口阻止程序或 IE 8 或更高版本中的任何设置;这是由于一些安全性,我相信可以阻止烦人的弹出窗口重新回到顶部。

            经过大量拉头发和谷歌搜索后,我发现了以下内容:

            Microsoft 建议更新,但这似乎不起作用,而且他们真的希望我要求我的网站的所有用户更新他们的机器!

            所以我想出了这个解决方法或修复。

            我对窗口的作用是:

            1. 首先我检查窗口是否打开
            2. 如果它打开了,就关闭它
            3. 在顶部打开一个新版本的窗口。

            要包含在标题或单独文件中的javascript代码:

            function nameoflink()
            {
                var nameofwindow = window.open('pagetolinkto.htm','nameofwindow','menubar=1,resizable=1,width=350,height=250');
                if (nameofwindow) {
                    nameofwindow.close();
                }
                window.open('pagetolinkto.htm','nameofwindow,'menubar=1,resizable=1,width=350,height=250');
                return false;
            }
            

            页面上的链接:

            <a href="#" onclick="nameoflink()">Click Here to go to name of link</a>
            

            在带有 IE8 的 MS Windows 7 中测试,不确定确切的版本。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-07-02
              • 1970-01-01
              • 2012-11-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多