Javascript 使XUL对话框窗口在不显示时显示滚动';我不适合屏幕

Javascript 使XUL对话框窗口在不显示时显示滚动';我不适合屏幕,javascript,modal-dialog,firefox-addon,xul,xulrunner,Javascript,Modal Dialog,Firefox Addon,Xul,Xulrunner,我正在构建一个在Xulrunner(23版)上运行的独立Win应用程序。在应用程序中,我需要打开一个模式对话框,该对话框略大于客户端的典型屏幕高度(1024)。在更大的屏幕上,我希望显示完整的模式窗口大小。而在较小的屏幕上,所有内容都应该可以通过滚动垂直滚动条来访问 在这种情况下,总结模态窗口的理想行为是: A.它将打开以垂直和水平放置所有内容。但是 B.如果不适合可见区域,则应在边界处停止,并在轴上显示不适合屏幕的滚动条 为了实现这一目标,我尝试了以下方法: 将“scrollbars=yes”

我正在构建一个在Xulrunner(23版)上运行的独立Win应用程序。在应用程序中,我需要打开一个模式对话框,该对话框略大于客户端的典型屏幕高度(1024)。在更大的屏幕上,我希望显示完整的模式窗口大小。而在较小的屏幕上,所有内容都应该可以通过滚动垂直滚动条来访问

在这种情况下,总结模态窗口的理想行为是:

A.它将打开以垂直和水平放置所有内容。但是

B.如果不适合可见区域,则应在边界处停止,并在轴上显示不适合屏幕的滚动条

为了实现这一目标,我尝试了以下方法:

  • “scrollbars=yes”
    添加到调用的
    strWindowFeatures
    参数中。这似乎一点效果都没有。这样做违反了要求B

  • 在对话框的最外层元素上使用
    style=“overflow:auto”
    。当对话框超出屏幕时,新窗口将显示滚动条。但是屏幕的边框和底部的任务栏不太合适。它在屏幕底部边缘以下的几个像素处结束。如图所示:

  • 这里是我把上面两种方法放在一起演示的地方

    在问这个问题之前,我一直在寻找答案。以下是我能找到的最好的:

    • 堆栈溢出:

    • Ohloh:(参见功能
      尺寸
      )。根据评论,它试图解决我的问题。我没有太多的运气通过修改代码样本来解决这个问题

    • Bugzilla:在Firefox中


    我仍在寻找解决方案或解决办法。如有任何想法或建议,将不胜感激

    我最初的想法:您对此有何看法:在“调整大小”事件中,如果大小超出屏幕高度,请将其调整为屏幕高度,然后启用滚动条。也可以调用windows Center WindowOn screen功能,但我不确定它是否会调整窗口大小以保持在屏幕内,可能只是将其居中,如功能所示:

    感谢@SergeyAvdeev:

    window.addEventListener('resize', function(event) {
        // If the window is too large resize it to fit the available screen
        var outer = windowOuter(),
            avail = available();
        if (outer.x > avail.x || outer.y > avail.y) {
            window.resizeTo(Math.min(outer.x, avail.x), Math.min(outer.y, avail.y));
        }
    }, true);
    

    我最初的想法是:在调整大小事件中,如果大小超出屏幕高度,请将其调整为屏幕高度,然后启用滚动条。也可以调用windows
    centerWindowOnScreen
    函数,但我不确定它是否会调整窗口大小以保持在屏幕内,可能只是按照函数所述将其居中。@Noitidart,正如您建议的那样,我尝试了以下操作:
    window.addEventListener('resize',函数(事件){//如果窗口太大,请调整其大小以适应可用屏幕…},对);
    并且它工作正常酷男:)我会将其移到解决方案:)'Hey@SergeyAvdeev非常感谢您在该示例中进行编辑。再加上对您的重复。我在中编辑了它。我不知道人们为什么拒绝您的编辑。