-1

我的电脑连接了多个显示器。我正在开发一个在浏览器的表格中显示数据的网络应用程序。当用户单击表格的一行时,将显示一个窗口,其中包含有关所选行的详细信息。如果用户单击不同的行,则会打开一个新窗口。

我需要完成两个要求:

  1. 窗户不应该叠在另一个上面,它们应该层叠。我有适用于 Firefox 的代码,但 IE 和 Chrome 只是在同一个地方打开每个窗口,以便它们堆叠起来。如果我跟踪打开的窗口数量,我可以使用级联机制,但有更好的方法吗?

  2. 如果机器有多个显示器,那么如果带有表格的窗口在一个屏幕上,而详细信息窗口在另一个屏幕上打开,那就太好了。在我所做的任何搜索中,我都找不到任何东西。是否有一些代码可以做到这一点?

编辑:

对于@Neal:

Function newWin( mypage, myname, cascade ) {
            if (!cascade) cascade = false;

    if (!myname)
            myname = 'DETAILS';

    var w = 820;
    var h = 685;
    var settings = 'height=' + h + ',';
    settings += 'width=' + w + ',';

    if (!cascade) {
        if (screen.width) {
            var winl = (screen.width - w) / 2;
            var wint = (screen.height - h) / 2;
        }
        else {
            winl = 0;
            wint = 0;
        }
        if (winl < 0) winl = 0;
        if (wint < 0) wint = 0;

        settings += 'top=' + wint + ',';
        settings += 'left=' + winl + ',';
    }

    settings += 'scrollbars=yes,resizable=yes,menubar=yes,location=yes';
    gPopupWindow = window.open(mypage, myname, settings);

    // fix for IE focus
    // when from ajax loaded list
    // see convoy dropdownlist item click
    //gPopupWindow.focus();
    setTimeout(function () { gPopupWindow.focus() }, 0);
}

通过传递 true for cascade,Firefox 允许操作系统在它想要的位置打开窗口。但是 IE 和 Chrome 总是将窗口放在同一个位置,尽管每个浏览器在屏幕上的位置不同。我希望 IE 和 Chrome 能像 Firefox 那样运行,但浏览器的差异是不争的事实。

正如我所说,我可以通过调用此函数来跟踪打开了多少个窗口,并根据该数字计算新的左上角坐标。不过,我宁愿不要。

4

1 回答 1

1

事实是,无法通过 JavaScript 控制在多屏幕系统上新窗口将显示在哪个屏幕上。并非没有编写您自己的 DLL 并将其合并到您的应用程序中。有一些方法可以在 DLL 中调用函数,但这并不值得,因为 DLL 是特定于 Windows 的,您需要在 Mac 和 Linux 上执行其他操作。

此外,不同的浏览器使这个问题复杂化,因为添加自定义代码的方法也因浏览器而异。

就此而言,如果您在显示新窗口时未指定左侧和顶部坐标,则每个浏览器都会在它决定显示窗口的任何屏幕上的不同位置显示新窗口。该行为是完全不一致的浏览器浏览器,更不用说操作系统到操作系统了。

不要这样做。

于 2013-08-12T16:00:33.893 回答