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.