0

2つのウィンドウがあります。1つはフレームセット内にあり、もう1つは新しいウィンドウ(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

JavaScriptで現在のモニターでポップアップウィンドウを開くにはどうすればよいですか?ポップアップウィンドウの配置を扱い、画面とウィンドウの座標の取得とウィンドウの配置に関する多くの洞察が含まれています

多くのブラウザが次のような面白い動作を許可しないことに注意する必要があります

  • オフスクリーンウィンドウ
  • 画面より広いウィンドウ
  • 複数の画面にまたがるウィンドウ

上記の質問に対する私の回答のコードを使用して、次のことから始めることができます

// 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 に答える