你能控制一个由Javascript创建的窗口显示在哪个显示器上吗?

时间:2013-08-07 13:42:53

标签: javascript

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

我需要做两件工作:

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

  2. 如果机器有多个显示器,那么带有桌子的窗口在一个屏幕上并且细节窗口在另一个屏幕上打开会很好。在我做过的任何搜索中,我都找不到任何东西。是否有某些代码可以执行此操作?

  3. 编辑:

    对于@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);
    }
    

    通过为cascade传递true,Firefox让操作系统打开它想要的窗口。但是IE&amp; Chrome始终将窗口放在同一个位置,但每个浏览器在屏幕上显示的位置都不同。我希望IE&amp; Chrome会像Firefox一样,但浏览器差异是生活中的事实。

    正如我所说,我可以通过调用此函数并计算新的左侧和左侧来跟踪已打开的窗口数量。基于该数字的顶部坐标。不过,我宁愿不要。

1 个答案:

答案 0 :(得分:1)

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

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

就此而言,如果你没有指定左和右;显示新窗口时的顶部坐标,每个浏览器在其决定显示窗口的任何屏幕上的不同位置显示新窗口。浏览器与浏览器的行为完全不一致,更不用说OS到OS了。

不要这样做。