Предоставление фокуса дочернему окну в IE8 - PullRequest
3 голосов
/ 18 ноября 2009

Я пытаюсь запустить всплывающее окно из функции Javascript и убедиться, что оно имеет фокус, используя следующий вызов:

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

Работает в любом другом браузере, но IE8 оставляет новое окно на заднем плане с мигающим оранжевым уведомлением панели задач. Видимо, это особенность IE8:

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

Это говорит о том, что я должен быть в состоянии сфокусировать окно, сделав вызов focus (), исходящий из новой страницы, но, похоже, это тоже не сработает. Я попытался вставить window.focus () в теги скрипта на странице и загрузку тела, но это не имеет никакого эффекта. Есть ли что-то, чего мне не хватает в вызове focus () при загрузке страницы, или в другом способе запуска всплывающего окна, которое IE8 не скрывает?

Ответы [ 5 ]

1 голос
/ 20 июня 2012

IE8 не разрешает эту функцию из-за проблем безопасности

Windows Internet Explorer 8 и более поздние версии. Метод focus больше не выводит дочерние окна (например, созданные с помощью метода open) на передний план. Дочерние окна теперь запрашивают фокус у пользователя, обычно мигая строкой заголовка. Чтобы напрямую вывести окно на передний план, добавьте в дочернее окно скрипт, который вызывает метод focus его оконного объекта

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

0 голосов
/ 24 января 2013

Проблема в том, что метод 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>

Протестировано в MS Windows 7 с IE8, не уверенным в точной версии.

0 голосов
/ 18 ноября 2009

Да, я пока не могу проверить это на 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>
0 голосов
/ 13 апреля 2011

Я выяснил, в чем проблема - выясняется, что причина запуска window.focus () в onload не состояла в том, что первый вызов window.open (). Focus () вызвал его мигание в фоновом режиме. и после этого любые последующие вызовы фокуса не будут работать. Если я не пытаюсь сфокусировать его из окна вызова, а только из всплывающего окна, оно обычно выходит вперед. Что за досадная «фича» ...

0 голосов
/ 18 ноября 2009

Вы можете попробовать это. Не уверен, что это будет работать, хотя>

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