3

一種のキオスクとして動作するWebページを作成しました。開くと、それが制御ウィンドウであるかどうかを検出します。そうでない場合は、制御ウィンドウページをロードし、新しいウィンドウでインデックスページを再度開いて、オープナーポインタを検出できるようにします。2番目のウィンドウには、3番目のウィンドウで任意のURLを開くリンクが含まれています。コントローラウィンドウは、この2番目のウィンドウが開いているかどうかを検出し、他のウィンドウにフォーカスがある場合は、そのウィンドウを前面に戻します。

プロセスのある時点でこの任意のWebサイトは、クイズ用の別のウィンドウを開きます(私のサイトによって制御されていません)が、コードが2番目のウィンドウを前に出し続けるため、この新しいウィンドウは後ろに押し出され続けます。2番目のウィンドウが別のウィンドウを開いたかどうかを検出し、開いている場合はウィンドウがフォーカスされないようにする方法はありますか?

以下のコードはメインページ(index.php)で実行されます

var bypass = <?=($b==1?'true':'false')?>;
if(!bypass && !window.opener && navigator.appVersion.indexOf('Mac') != -1){
    window.location = '/labs/rearWindow.php';
}

以下は、コントローラーウィンドウ(rearWindow.php)で実行されている私のコードです。

var mainWindow = null;
var accelWindow = null;
var windowSettings = 'channelmode=yes,fullscreen=yes,height='+screen.availHeight+',width='+screen.availWidth+',left=0,top=0';

$(document).ready(function(){
    window.moveTo(0,0);
    window.resizeTo(10, 10);
    checkWindow();
});

function checkWindow(){
  if(mainWindow == null || mainWindow.closed){
    // If the main window doesn't exist or it's been closed, open new window to the index
    mainWindow = window.open('/labs/index.php', 'mainLabWindow', windowSettings);
    if(!mainWindow){
      // If the window didn't open in the satement above (usually because pop-ups are blocked), open up current window to an alternate url
      window.location = '/labs/index.php?b=1';
    }
  }else if(mainWindow != null && !mainWindow.closed && accelWindow != null && !accelWindow.closed){
    // If main window is already open and it hasn't been closed and the AR window has been opened and hasn't been closed
    accelWindow.focus();
  }else if(mainWindow != null && !mainWindow.closed && accelWindow != null && accelWindow.closed){
    // If main window has been opened and hasn't been closed and AR window has been opened but has been closed; then go back to main window
    accelWindow = null;
    mainWindow.focus();
  }else if(mainWindow != null && !mainWindow.closed){
    // If main window has been opened and has not been closed
    mainWindow.focus();
  }
  setTimeout(checkWindow, 500);
}

あなたの助けとフィードバックは大歓迎です。

最初のifは、accelWindow.focus()を呼び出し、accelWindowに子ウィンドウがあるかどうか(つまり、クイズを開いたかどうか)を確認したい場合は、accelWindow.focus()を呼び出さないでください。

PSこれは私の最初の投稿/質問です:)

4

1 に答える 1

0

これらの「ウィンドウ」のコンテンツを、同じブラウザウィンドウ内、同じアプリ内のある種のフレームに表示できます。ligthboxを使用できます。より多くのウィンドウで動作するブラウザベースのアプリを使用することは不快なようです。

于 2013-02-11T14:56:33.493 に答える