2010-12-02 19 views
3

fand ich this file bei Google Code mit der Funktion:Wie platziere ich ein Xul-Fenster als "Immer im Vordergrund"?

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

Die Teile davon, die ich brauche nur:

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

Aber ich finde nicht, was die Ci definiert, wo ist. Irgendeine Idee, was kann es sein? Oder irgendeine andere Idee, wie man ein Fenster immer oben anordnet? (diese Lösung "nur für Windows" passt nicht zu mir).

--update

ich über die nsIWindowMediator gerade lese, die einige Methoden hat das Fenster Z, um zu handhaben. Aber es sagt, dass die Methoden von C++, nicht von Javascript verwendet werden sollten. Das heißt, der Code sollte von XPCOM-Komponenten verwendet werden (sollte ich als XPCOM-Komponente das Fenster öffnen)? Kann jemand, der es schon benutzt hat, bestätigen?

Ich lese trotzdem noch.

--update

ich den nsIWindowMediator versucht habe (mit XPCOM Komponente), aber es nichts nur tut, wenn ich den Z-Pegel gesetzt.

immer noch nach einem Weg suchen, um die Fenster aways oben zu setzen ..

--attempt mit '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> 

hat nicht funktioniert.

--attempt mit 'Fräsen in Höhenschnitten':

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> 

nicht funktionierte. Nither mit alwaysraised eingestellt, oder einen höheren oder niedrigeren zlevel zum test.xul hinzufügen (mit top.xul zlevel = "6")

Antwort

2

Gefunden: öffnen Sie es einfach mit OpenDialog, und es wird immer oben sein.

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> 
+0

Können Sie ein Beispiel veröffentlichen, wie openDialog verwendet wird, um ein Fenster auf diese Weise zu öffnen und einen Link zu der Ressource hinzuzufügen, wo Sie diese gefunden haben. Danke für die Beantwortung Ihrer eigenen Frage :) – jmort253

+0

@ jmort253 sicher, da ist es. –

+0

Ich sehe nicht, was das mit dem Öffnen des Fensters als immer oben zu tun hat. – Neil

1

Wenn Sie immer wollen, dass das Fenster oben ist, dann ist der einfachste Weg zu verwenden Die alwaysraised Chrom-Flagge beim Öffnen des Fensters. Wenn Sie das Fenster nicht selbst öffnen können, ist der zweite einfachste Weg, <window zlevel="6"> in Ihrem XUL zu verwenden. Sie können den Zlevel sogar persistieren; Das Hilfefenster von SeaMonkey verwendet dazu eine Kontextmenüoption, um zLevel umzuschalten.

Übrigens ist Ci eine gebräuchliche Abkürzung für Components.interfaces, da das Schreiben (z. B. Components.interfaces.nsIXULWindow.rasiedZ) auf 80-Zeichen-Zeilen schwierig ist.

+0

I alwaysraised und Fräsen in Höhenschnitten versucht, aber keine Arbeit. Ich habe die Frage mit meinen Beispielen aktualisiert. –

+0

gefunden: mit openDilaog ist der Weg zu gehen .. :) –

+0

'alwaysRaised' oder' alperraised' arbeiten für mich in der neuesten Firefox-Version (26.0 zum Zeitpunkt der Erstellung). – azdev