[英]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
)。
好吧,我一直想知道一個類似的問題,並且找到了一個線索,所以我想在這里分享它:
這樣,您就可以完全省去服務器端檢查,從而減少了AJAX調用次數,服務器負載,延遲(因為AJAX請求比本地通信慢)和流量。
只要確保使您的標簽“檢測”已消失的標簽即可。
大多數瀏覽器都支持beforeUnload
事件,或者您存儲一個時間戳記,該時間戳記由選項卡使用打開的彈出窗口每隔幾秒鍾刷新一次,並由其他人檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.