PC に複数のディスプレイが接続されています。ブラウザーのテーブルにデータを表示する Web アプリに取り組んでいます。ユーザーがテーブルの行をクリックすると、選択された行の詳細を示すウィンドウが表示されます。ユーザーが別の行をクリックすると、新しいウィンドウが開きます。
機能させるために必要な2つの要件があります。
ウィンドウは上下に積み上げてはならず、カスケードする必要があります。私は Firefox で動作するコードを持っていますが、IE と Chrome は同じ場所で各ウィンドウを開くだけなので、スタックします。開いているウィンドウの数を追跡すれば、カスケード メカニズムを完成させることができますが、もっと良い方法はありますか?
マシンに複数のディスプレイがある場合、表を含むウィンドウが 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 のように動作することを期待していましたが、ブラウザの違いは現実です。
前述したように、この関数を呼び出すことで開いているウィンドウの数を追跡し、その数に基づいて新しい左と上の座標を計算できます。でも、私はむしろしたくない。