Javascript移动开启窗口

时间:2013-01-31 17:57:34

标签: javascript html frames

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

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

以下是要求:

  1. 必须在IE8中工作。
  2. 无法修改开启窗口中的代码。
  3. 打开的窗口应完全可见(请参阅右上角的X)
  4. 我能够找到一个能够获得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 };
    }
    

1 个答案:

答案 0 :(得分:0)

How do I get JavaScript to open a popup window on the 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);

我没有解决你的问题,即弹出窗口必须都在屏幕上。那是因为如果主窗口全屏,我不知道你可以做什么。

流行窗口已经过时了,我知道有些人想要使用它,但是浏览器真的在与它作斗争(通过强制执行从选项卡式窗口环境中获得的规则)。你正在逆流而去游泳。

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

Here's a jsfiddle让您开始向我们展示您的问题