-1

PC に複数のディスプレイが接続されています。ブラウザーのテーブルにデータを表示する Web アプリに取り組んでいます。ユーザーがテーブルの行をクリックすると、選択された行の詳細を示すウィンドウが表示されます。ユーザーが別の行をクリックすると、新しいウィンドウが開きます。

機能させるために必要な2つの要件があります。

  1. ウィンドウは上下に積み上げてはならず、カスケードする必要があります。私は Firefox で動作するコードを持っていますが、IE と Chrome は同じ場所で各ウィンドウを開くだけなので、スタックします。開いているウィンドウの数を追跡すれば、カスケード メカニズムを完成させることができますが、もっと良い方法はありますか?

  2. マシンに複数のディスプレイがある場合、表を含むウィンドウが 1 つの画面に表示され、詳細ウィンドウが別の画面に表示されると便利です。私が行った検索のいずれでも、何も見つけることができませんでした。これを行うコードはどこかにありますか?

編集:

@ニールの場合:

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 を渡すことによりcascade、Firefox は OS が必要な場所でウィンドウを開くことができるようにします。ただし、IE と Chrome では常に同じ場所にウィンドウが表示されますが、画面上のどこに表示されるかはブラウザーごとに異なります。IE と Chrome が Firefox のように動作することを期待していましたが、ブラウザの違いは現実です。

前述したように、この関数を呼び出すことで開いているウィンドウの数を追跡し、その数に基づいて新しい左と上の座標を計算できます。でも、私はむしろしたくない。

4

1 に答える 1