Вопрос

я нашел этот файл в коде 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-символах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top