Question

Je trouve ce fichier au code Google avec la fonction:

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

Les parties de ce que j'ai besoin sont juste:

var xulWin = window.QueryInterface(Ci.nsIInterfaceRequestor)
        .getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem)
        .treeOwner.QueryInterface(Ci.nsIInterfaceRequestor)
        .getInterface(Ci.nsIXULWindow);
xulWin.zLevel = xulWin.raisedZ;

Mais je ne trouve pas ce où est le Ci défini. Toute idée que peut-il être? Ou toute autre idée de comment définir une fenêtre toujours sur le dessus? (Cette solution "juste pour les fenêtres" ne pas fits pour moi).

- Mise à jour

Je lis sur le nsIWindowMediator , qui a des méthodes pour gérer la fenêtre pour Z . Mais il est dit que les méthodes doivent être utilisées de c ++, pas javascript. Cela signifie que le code doit être utilisé à partir de composants XPCOM (je devrais comme XPCOM élément pour ouvrir la fenêtre)? Est-ce que quelqu'un qui déjà utilisé pourrait confirmer

Je lis toujours de toute façon.

- Mise à jour

Je l'ai essayé le nsIWindowMediator (avec un composant XPCOM), mais il n'a tout simplement rien quand je régler le niveau Z.

cherchent encore un moyen de mettre les aways fenêtre sur le dessus ..

- tentative avec 'alwaysraised':

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>

n'a pas travaillé.

- tentative avec '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>

n'a pas travaillé. Nither avec alwaysraised sertie, ou en ajoutant un zlevel supérieure ou inférieure à la test.xul (avec top.xul zlevel = "6")

Était-ce utile?

La solution

Résultats:. Il suffit d'ouvrir l'aide openDialog, et il sera toujours au-dessus

Ex:

<?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>

Autres conseils

Si vous voulez toujours la fenêtre pour être sur le dessus, le plus simple est d'utiliser le drapeau de chrome alwaysraised lors de l'ouverture de la fenêtre.

Si vous ne parvenez pas à ouvrir la fenêtre vous, la deuxième façon la plus simple est d'utiliser <window zlevel="6"> dans votre XUL. Vous pouvez même conserver l'zlevel; La fenêtre d'aide de Seamonkey fait cela, en utilisant une option de menu contextuel pour basculer l'zLevel.

Par ailleurs, Ci est une abréviation courante pour Components.interfaces depuis l'écriture (par exemple) Components.interfaces.nsIXULWindow.rasiedZ est difficile à faire sur les lignes de 80 caractères.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top