【问题标题】:How to place a Xul window as "Always On Top"?如何将 Xul 窗口设置为“始终在顶部”?
【发布时间】:2010-12-02 13:03:39
【问题描述】:

我在 google 代码中找到了this file 的功能:

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 的定义在哪里。知道会是什么吗?或者任何其他关于如何将窗口始终设置在顶部的想法? (“仅适用于 Windows”的解决方案不适合我)。

--更新

我正在阅读nsIWindowMediator,它有一些方法来处理窗口 Z 顺序。但它说这些方法应该从 c++ 中使用,而不是 javascript。那意味着代码应该从XPCOM组件中使用(我应该作为XPCOM组件来打开窗口)?有没有用过的可以确认一下?

反正我还在看书。

--更新

我已经尝试过 nsIWindowMediator(带有 XPCOM 组件),但是当我设置 Z 级别时它什么也没做。

仍在寻找将窗户放在顶部的方法..

--尝试使用“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>

没用。

--尝试使用“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>

没用。使用 alwaysraised 设置,或者在 test.xul 中添加更高或更低的 zlevel(使用 top.xul zlevel="6")

【问题讨论】:

    标签: javascript xul xpcom always-on-top


    【解决方案1】:

    找到:使用 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>
    

    【讨论】:

    • 您能否发布一个示例,说明如何使用 openDialog 以这种方式打开窗口,并包含指向您找到此资源的资源的链接。感谢您回答您自己的问题:)
    • 我不明白这与像往常一样在顶部打开窗口有什么关系。
    • @Neil 如果你运行它,你可以看到带有“ON TOP”标签的窗口永远不会落后于任何其他窗口。正是我想要的..
    • 我从没想过这会在一百万年后起作用。感谢您澄清@Neil 的问题并发布答案。
    【解决方案2】:

    如果您总是希望窗口位于顶部,那么最简单的方法是在打开窗口时使用alwaysraised chrome 标志。

    如果您不能自己打开窗口,第二个最简单的方法是在您的 XUL 中使用&lt;window zlevel="6"&gt;。你甚至可以持久化 zlevel; SeaMonkey 的帮助窗口会执行此操作,使用上下文菜单选项来切换 zLevel。

    顺便说一句,CiComponents.interfaces 的常见缩写,因为在 80 个字符的行上写(例如)Components.interfaces.nsIXULWindow.rasiedZ 是很困难的。

    【讨论】:

    • 我尝试了 alwaysraised 和 zlevel,但没有任何效果。我已经用我的示例更新了问题。
    • 发现:使用 openDilaog 是要走的路.. :)
    • alwaysRaisedalwaysraised 在最新的 Firefox 版本(撰写本文时为 26.0)中为我工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2015-02-08
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多