2

ベースアプリで閉じられたタブを検出してページを更新できるjQueryの方法はありますか?

発券システムを構築しました。チケットをクリックすると、 target="_blank" を使用して新しいタブでチケットが開きます。チケットを更新したとき (更新したときのみ)、[タブを閉じる] リンクをクリックすると、メイン アプリ (前のタブ) がこのイベントを認識してページを自動的に更新するようにします。

window.open() を使用して、ループで閉じたハンドルを検出できることは知っていますが、IE では新しいタブで開かず、代わりに新しいウィンドウを開くことがあるため、洗練されていません。target="_blank" を使用すると、IE が新しいタブを開くように見えると思います。私はタブの方が好きです。

4

2 に答える 2

0

window.openを使用する場合は、window.openerおよびwindow.onbeforeunloadも使用できます。唯一の欠点は、タブが表示されないことです。しかし、そうすればループは必要ありません。

したがって、たとえば:

メインスクリーン:

  • クリックイベント:window.open(/*ウィンドウを開く*/);

チケット画面:

  • loadイベント:window.openerでonbeforeunloadがトリガーされたときにreloadをバインドします
于 2012-07-06T09:29:38.197 に答える
0

したがって、チケット テーブルを持つ親タブと、実際のチケットを持つ子タブがあります。ただし、window.open() イベントの代わりに target="_blank" クリックを使用しているため、これは真の親子関係ではありません。

修正はちょっと面倒ですが、うまくいきます。変更は「親」タブに追加するだけで済みます。最初に、Javascript で gbRefreshStale グローバル ブール値をページに追加し、次のようにその値を 0 に設定します。

var gbRefreshStale = 0;

次に、target="_blank" をクリックするたびに、次のように jQuery でインターセプトします。

$('A[target=_blank]').click(function(){
  setTimeout('gbRefreshStale=1;clearTimeout();',500);
  return true;
});

次に、3 番目に、ページのヘッダーにこの mouseenter イベントが必要になります。

$('#header').mouseenter(function(){ 
  // assuming you called your banner/header as #header
  if (gbRefreshStale) {
    gbRefreshStale = 0;
    location.href = location.href;
  }
});

ここでの効果は、チケットの新しいタブが開かれることですが、誰かがそのタブを閉じてヘッダーにマウスを移動すると (子タブを閉じたばかりなので、おそらくそうするでしょう)、親タブが更新されます。これは、複数のタブを開いたり閉じたりした場合にも機能し、このシステムにより、親タブがループで更新されるのを防ぎます。タイムアウトが必要なのは、そうしないと、そのタブが開く前に誰かのマウスが親の #header セクションを横切る可能性があるためです。

于 2012-07-08T05:03:11.513 に答える