2

だから私はクイズWebアプリケーションを開発しています。そして、クイズの管理者が設定できる設定を追加して、クイズの実行中にユーザーがウィンドウ/タブを1つだけ開くことができるようにしたいと考えました。

この理由は、クイズ ウィンドウ/タブが開いている間、彼らが goto like google や google で答えを見つけられないようにするためです。もちろん、彼らはいつでも別のブラウザーを開いてそのようにすることができましたが、それでも彼らが有効にできるようにすることは素晴らしい機能だと考えていました.

これがセキュリティサンドボックス違反に該当するかどうか(したがって、まったく利用できないかどうか)はわかりませんが、別のタブまたはウィンドウが開いているかどうかを検出したいだけで、タブ/ウィンドウに関する実際の情報を取得したくないので、それを望んでいますこれは、javascript を使用して何とか可能です。

4

3 に答える 3

9

できませんが、考えられる回避策は、新しいHTML5 フルスクリーン APIを使用することです。関数を使用しsetIntervalて定期的にテストしdocument.fullScreen == true、ユーザーが全画面表示を切り替えていないことを確認できます。

これは最新のブラウザーでのみ機能し、ユーザーが JS コンソールの使い方を知っている場合に回避するのは簡単ですが、要件に合っているようです。

現在、フルスクリーン API の実装はすべてベンダー プレフィックスであることに注意してください。

于 2012-07-09T23:23:37.250 に答える
6

行の下に記載されているアプローチに代わる実行可能な方法があるようです: Page Visibility APIを使用して、現在すべての最新のブラウザーでサポートされています。これは、 をリッスンするよりもはるかに信頼できるように見えますblur。それを行うには、次の 1 つの方法があります。

// on quiz start
document.addEventListener('visibilitychange', function() {
  if (document.hidden) {
    console.log('Y U hide?');
  }
});

問題はvisibilitychange、ページが表示から非表示になったとき (およびその逆) にのみイベントが発生することです。ユーザーは引き続き 2 つのブラウザ インスタンスを開くことができます。1 つはクイズ ページ、もう 1 つはお気に入りの検索エンジンなどです。


開いているタブの数を検出することはできませんが、次のトリックを使用して、ユーザーがクイズ ページから離れたことを確認することができます。

$(function(){
  $(window).blur(function() {
    console.log('I see what you did here!');
  });
});

悲しいことに、それはまた、多くの誤検知をもたらします.

于 2012-07-09T23:29:03.990 に答える
3

できませんし、すべきではありません。

于 2012-07-09T23:15:32.623 に答える