Xul's window.blur() не работает? Есть ли альтернатива?

Я пытаюсь использовать window.blur(), чтобы открыть окно без его фокусировки (или фокусировать и расфокусировать очень быстро, поэтому похоже, что оно не сфокусировано).

Но похоже, что это не работает, есть ли альтернатива?

Моя попытка:

blurTest.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<window width="400" height="300"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <script>
        <![CDATA[
            function onkeypress(event) {
                // for this sample don't matter which key is pressed
                open('second.xul','SecondWindow','chrome, width=400, height=300');
            }
            addEventListener("keypress", onkeypress, false);
        ]]>
    </script>

    <label value="MAIN WINDOW"/>

</window>

second.xul:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>

<window width="400" height="300"
    onload="blur();"
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <label value="SECOND" />

</window>

Обсервованный Мы можем подумать об использовании setTimeout(window.focus, 1), чтобы вызвать фокус обратно к моему окну после открытия второго окна. Но мне нужно второе окно, чтобы справиться с фокусом. Идеальный сценарий был бы, если бы второе окно никогда не могло получить фокус, просто откройте / восстановите окно без получения фокуса.

1 ответ

Решение

Вы можете открыть окно XUL, как если бы это было всплывающее окно, используя popup особенность окна в openDialog вызов. Это должно открыть самое верхнее окно, которое не крадет фокус. Обратите внимание, что по умолчанию всплывающее окно не имеет Chrome ОС; в Windows вы можете добавить titlebar функция (которая дает вам мини-строку заголовка, как для окна палитры) и close Кнопка (в сочетании с заголовком), но я не знаю, какие флаги функций работают на других платформах.

Настольные оповещения все еще используют эту функцию в Windows, но я считаю, что в Linux они теперь используют libnotify, а на Mac - Growl.

Другие вопросы по тегам