在IE8中给予儿童窗口焦点

时间:2009-11-17 21:26:06

标签: javascript internet-explorer-8 focus

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

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

它适用于所有其他浏览器,但IE8在后台使用闪烁的橙色任务栏通知离开新窗口。显然这是IE8的一个功能:

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

它说我应该能够通过从新页面发出一个focus()调用来聚焦窗口,但这似乎也不起作用。我已经尝试在页面中的脚本标记和body的onload中插入window.focus()但它没有任何效果。在页面加载时是否有关于进行focus()调用的错误,或者启动IE8不会隐藏的弹出窗口的其他方法?

5 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

是的我现在无法在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>

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

  

微软建议更新,但这似乎不起作用加上他们如何真诚地期望我要求我的网站所有用户更新他们的机器!

所以我想出了这个工作或修复。

我对窗口的处理方式是:

  1. 首先我检查窗口是否打开
  2. 如果它打开,关闭它
  3. 在顶部打开一个新的窗口版本。
  4. 包含在标题或单独文件中的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中测试不确定版本。