2010-12-02 8 views
3

Я нашел this file в Google код с помощью функции:Как разместить окно Xul как «Always On Top»?

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 определена. Любая идея, что это может быть? Или любая другая идея о том, как установить окно всегда сверху? (это решение «только для окон» мне не подходит).

--update

Я читал о nsIWindowMediator, который имеет некоторые методы для обработки заказа окна Z. Но он говорит, что методы должны использоваться из C++, а не javascript. Это означает, что код должен использоваться из компонентов XPCOM (я должен как компонент XPCOM открыть окно)? Кто-нибудь, кто уже использовал это, может подтвердить?

Я все еще читаю.

--update

Я попытался nsIWindowMediator (с компонентом XPCOM), но он просто ничего не делает, когда я установил уровень Z.

Еще ищут способ положить в окно сувенирной продукции сверху ..

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

не работал.

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

не работал. Ни с селектированной настройкой, ни с добавлением верхнего или нижнего уровня z test в test.xul (с top.xul zlevel = "6")

ответ

2

Найдено: просто откройте его, используя openDialog, и он будет всегда сверху.

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

Можете ли вы опубликовать пример того, как использовать openDialog, чтобы открыть окно таким образом, а также включить ссылку на ресурс, где вы это нашли. Спасибо, что ответили на ваш собственный вопрос :) – jmort253

+0

@ jmort253 уверен, вот оно. –

+0

Я не вижу, как это связано с открытием окна, как всегда сверху. – Neil

1

Если вы всегда хотите, чтобы окно было сверху, тогда самый простой способ - использовать alwaysraised Хром-флаг при открытии окна.

Если вы не открываете окно самостоятельно, вторым самым простым способом является использование <window zlevel="6"> в вашем XUL. Вы даже можете сохранить zlevel; Окно справки SeaMonkey делает это, используя параметр контекстного меню для переключения zLevel.

К сожалению, Ci является общей аббревиатурой от Components.interfaces, так как письмо (например, Components.interfaces.nsIXULWindow.rasiedZ сложно выполнить по 80-символьным линиям.

+0

Я попытался alwaysraised и zlevel, но ни одна работа. Я обновил вопрос с помощью своих образцов. –

+0

найдено: using openDilaog - это путь. :) –

+0

'alwaysRaised' или' alwaysraised' работают для меня в последней версии Firefox (26.0 на момент написания этой статьи). – azdev