簡體   English   中英

如果對話框在一個瀏覽器選項卡中打開,是否阻止它在另一個瀏覽器選項卡中打開?

[英]If dialog opens in one browser tab, prevent it from opening in another?

我有一個使用ajax來檢查是否為真的代碼,例如:

$.ajax({
  type: 'get',
  url: ACTION_URL
  dataType: 'json',
  success: function(result) {
    if (result && result.success) {
        $('#JQUERY_UI_DIALOG').dialog('open');
    }
  }
});

現在,此ajax每隔幾秒鍾運行一次。 如果用戶在同一頁面或不同頁面的瀏覽器中打開了多個選項卡,並且對話框在一個選項卡上打開,則會在所有選項卡上打開。

如果用戶關閉或接受一個選項卡的對話框,則其他對話框不會關閉,因此用戶必須瀏覽所有選項卡並手動進行。

如果至少在某些選項卡上關閉了對話框,是否可以使其他選項卡關閉該對話框? 或什至在一個標簽上打開它時都不要打開它。

最好是阻止其他人打開,因為結束操作會要求您每隔幾秒鍾再發出一個請求(或使現有請求復雜化)。 因此,基本上,您可以做的是按會話在服務器上保存彈出窗口的狀態。 假設您已經有類似的東西

$.getJSON(ACTION_URL, function(result){
    if(result && result.success && !result.popupOpen){
        $.post(POPUP_URL, {open: true}, function(){
            $('#JQUERY_UI_DIALOG').dialog('open');
        });
    }
});

然后,在服務器端,您可以將相應的會話變量設置為true,這樣,來自其他瀏覽器的任何傳入請求都將知道result.success ,但仍然知道已經打開了一個彈出窗口( popupOpen )。

好吧,我一直想知道一個類似的問題,並且找到了一個線索,所以我想在這里分享它:

Javascript:在標簽之間共享數據

這樣,您就可以完全省去服務器端檢查,從而減少了AJAX調用次數,服務器負載,延遲(因為AJAX請求比本地通信慢)和流量。

只要確保使您的標簽“檢測”已消失的標簽即可。
大多數瀏覽器都支持beforeUnload事件,或者您存儲一個時間戳記,該時間戳記由選項卡使用打開的彈出窗口每隔幾秒鍾刷新一次,並由其他人檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM