我正在构建一个在Xulrunner上运行的独立Win应用程序(版本23)。在应用程序中,我需要打开一个稍大于客户端典型屏幕高度(1024)的模式对话框。在更大的屏幕上,我想要显示完整的模态窗口大小。在较小的屏幕上,通过滚动垂直滚动条可以访问所有内容。
总结一下,在这种情况下模态窗口的理想行为是:
一个。它打开以垂直和水平地适合所有内容。但是......
B中。如果它不适合可见区域,它应该停在边界并在轴上显示不适合屏幕的滚动条。
为了实现这一点,我尝试了以下方法:
将"scrollbars=yes"
添加到window.openDialog
来电的strWindowFeatures
参数中。这似乎根本没有效果。这样做违反了要求B.
在对话框中最外层的元素上使用style="overflow: auto"
。然后,当对话框超出屏幕时,新窗口将显示滚动条。但它与屏幕的边框和底部的任务栏并不搭配。它在屏幕下边缘下方的几个像素处结束。见图:
以下是a test application我已经将上述两种方法展示在一起。
在提出这个问题之前,我已经找到了答案。这是我能找到的最好的:
Stack Overflow:XUL prefwindow size problems。
Ohloh:a code sample(参见函数size
)。根据评论,它试图解决我的问题。通过代码示例修改解决问题,我没有太多运气。
Bugzilla:Firefox中的related bug。
我还在寻找解决方案或解决方法。任何想法或建议将不胜感激!
答案 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);