当XUL对话窗口不适合屏幕时,显示滚动

时间:2014-08-07 22:31:13

标签: javascript modal-dialog firefox-addon xul xulrunner

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

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

一个。它打开以垂直和水平地适合所有内容。但是......

B中。如果它不适合可见区域,它应该停在边界并在轴上显示不适合屏幕的滚动条。

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

  1. "scrollbars=yes"添加到window.openDialog来电的strWindowFeatures参数中。这似乎根本没有效果。这样做违反了要求B.

  2. 在对话框中最外层的元素上使用style="overflow: auto"。然后,当对话框超出屏幕时,新窗口将显示滚动条。但它与屏幕的边框和底部的任务栏并不搭配。它在屏幕下边缘下方的几个像素处结束。见图:

  3. 以下是a test application我已经将上述两种方法展示在一起。

    在提出这个问题之前,我已经找到了答案。这是我能找到的最好的:

    我还在寻找解决方案或解决方法。任何想法或建议将不胜感激!

1 个答案:

答案 0 :(得分:1)

我最初的想法:您如何看待这一点:在调整大小事件时,如果大小超出屏幕高度,请将其调整为屏幕高度,然后启用滚动条。也许可以调用windows centerWindowOnScreen函数,我不确定它是否调整窗口大小以保持在屏幕内,也许只是像函数所说的那样居中:

谢谢@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);