0

我有两个窗户;一个在框架集中,另一个在新窗口中从另一个打开(window.open(...))。

我正在尝试将打开的窗口的左边缘移动到开启窗口的右边缘。

以下是要求:

  1. 必须在 IE8 下工作。
  2. 无法修改开启程序窗口中的代码。
  3. 打开的窗口应该是完全可见的(见右上角的 X)

我能够找到一个获得正确宽度和高度(带有滚动条)的 IE8 窗口的解决方案。它涉及移动窗口并检查它的值,但是当我运行 window.opener.moveTo() 时,它会移动框架而不是实际的窗口,因此不会记录正确的值。

这是我目前正在使用的代码:

function moveAway()
{
    //Array Style
    var main = getWindowSize(window.opener)
    var child = getWindowSize(window)

    //How to move
    var topAvail  = main.top;
    var bottomAvail = window.opener.screen.availHeight - main.bottom;
    var leftAvail = main.left;
    var rightAvail = window.opener.screen.availWidth - main.right;

    var choice = Math.max(topAvail,bottomAvail,leftAvail,rightAvail)

    if(choice == rightAvail)
    {
        window.moveTo(main.right,main.top)
        window.resizeTo(rightAvail,main.bottom)
    }else if(choice == bottomAvail)
    {
        window.moveTo(main.left,main.bottom)
        window.resizeTo(window.opener.document.body.clientWidth,bottomAvail-36)
    } else if(choice == leftAvail)
    {
        window.moveTo(0,main.top)
        window.resizeTo(leftAvail,main.bottom)
    } else if(choice == topAvail)
    {
        window.moveTo(main.left,0)
        window.resizeTo(main.right,topAvail)
    }
    //return "item\ttop\tleft\tbottom\tright\nmain\t" + main.join("\t") + "\nchild\t" + child.join("\t")
}


function getWindowSize(windowObj) {
    var wW, wH;
    var wT = windowObj.screenTop;
    var wL = windowObj.screenLeft;
    if (windowObj.outerWidth) {
        wW = windowObj.outerWidth;
        wH = windowObj.outerHeight;
    } else {
        var cW = windowObj.document.body.offsetWidth;
        var cH = windowObj.document.body.offsetHeight;
        windowObj.resizeTo(500,500);
        var barsW = 500 - windowObj.document.body.offsetWidth;
        var barsH = 500 - windowObj.document.body.offsetHeight;
        wW = barsW + cW;
        wH = barsH + cH;
        windowObj.resizeTo(wW,wH);
    }
    return { right: wW, bottom: wH, top : wT, left : wL };
}
4

1 回答 1

1

How do I get JavaScript to open a popup window on current monitor处理定位弹出窗口并包含很多关于获取屏幕和窗口坐标以及定位窗口的见解

您必须注意,许多浏览器会禁止有趣的行为,例如

  • 离屏窗口
  • 比屏幕宽的窗户
  • 跨越多个屏幕的窗口

使用我对上述问题的回答中的代码,您可以开始以下操作

// Pops a window relative to the current window position
function popup(url, winName, xOffset, yOffset, width, height) {
    width = width || 100;
    height = height || 100;  
    var x = (window.screenX || window.screenLeft || 0) + (xOffset || 0);
    var y = (window.screenY || window.screenTop || 0) + (yOffset || 0);
    return window.open(url, winName, 'top=' +y+ ',left=' +x + ',width=' + width + ',height='+ height);
}

var size = getWindowSize(window);
var popupWin = popup("http://www.google.com", "popup", size.right -  size.left);

我没有解决您对弹出窗口必须全部显示在屏幕上的担忧。那是因为我不知道如果主窗口是全屏的,你可能会做什么。

弹出窗口已过时,我知道有些人想使用它,但浏览器确实在与它作斗争(通过强加来自选项卡式窗口环境的规则)。你在这里逆流而上。

最后一点,您不需要移动窗口,您只需指定顶部/左侧和宽度/高度,而不是让窗口在显示后四处移动。请参阅我的弹出功能。

这是一个 jsfiddle让您开始向我们展示您的问题

于 2013-01-31T18:55:13.280 回答