Как разместить окно XUL как «всегда на вершине»?
-
30-09-2019 - |
Вопрос
я нашел этот файл в коде Google с функцией:
function SetAlwaysOnTop() {
var chkTop = document.getElementById("itmAlwaysOnTop");
var xulWin = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIXULWindow);
if(chkTop.getAttribute("checked") == "true") {
xulWin.zLevel = xulWin.raisedZ;
} else {
xulWin.zLevel = xulWin.normalZ;
}
}
Части этого, которые мне нужны, просто:
var xulWin = window.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem)
.treeOwner.QueryInterface(Ci.nsIInterfaceRequestor)
.getInterface(Ci.nsIXULWindow);
xulWin.zLevel = xulWin.raisedZ;
Но я не нахожу то, что определяется CI. Есть идеи, что это может быть? Или любая другая идея о том, как установить окно всегда на вершине? (Это решение «только для окон» не подходит для меня).
--Обновить
Я читаю о NSIWINDOWMEDIATOR, который имеет некоторые методы для обработки порядка z. Но это говорит о том, что методы должны использоваться из C ++, а не JavaScript. Это означает, что код следует использовать из компонентов XPCOM (я должен как компонент xpcom, чтобы открыть окно)? Кто -нибудь, кто уже использовал его, может подтвердить?
Я все еще читаю все равно.
--Обновить
Я попробовал NSIWindowMediator (с компонентом XPCOM), но он просто ничего не делает, когда я устанавливаю уровень Z.
Все еще ищите способ отложить окно сверху ..
-Обработано с «всегда
test.xul:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window width="400" height="300"
onload="open('top.xul','GreenfoxChannelWindow','chrome, alwaysraised');"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="MAIN WINDOW"/>
</window>
top.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">
<label value="ON TOP"/>
</window>
не сработал.
-Соблюдается с «Zlevel»:
test.xul:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window width="400" height="300"
onload="open('top.xul','GreenfoxChannelWindow','chrome');"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="MAIN WINDOW"/>
</window>
top.xul:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window width="400" height="300" zlevel="6"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="ON TOP"/>
</window>
не сработал. Nither с всегда наложенным или добавлением более высокого или более низкого Zlevel в test.xul (с top.xul zlevel = "6")
Решение
Найдено: просто откройте его, используя Opendialog, и он всегда будет на вершине.
Бывший:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window width="400" height="300"
onload="openDialog('top.xul','TopWindow','chrome');"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="MAIN WINDOW"/>
</window>
top.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">
<label value="ON TOP" />
</window>
Другие советы
Если вы всегда хотите, чтобы окно было сверху, то самый простой способ - использовать alwaysraised
Хромированный флаг при открытии окна.
Если вы не можете открыть окно <window zlevel="6">
в твоем XUL. Вы даже можете сохранить Zlevel; Окно справки Siemonkey делает это, используя опцию контекстного меню для переключения Zlevel.
Кстати, Ci
является распространенным сокращением для Components.interfaces
С момента написания (например) Components.interfaces.nsIXULWindow.rasiedZ
трудно сделать на 80-символах.