如果对话框在一个浏览器选项卡中打开,请阻止它在另一个浏

时间:2013-11-19 18:02:36

标签: javascript jquery ajax

我有一个使用ajax检查某些内容是否为真的代码,例如:

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

现在这个ajax每隔几秒运行一次。如果用户在同一页面或不同页面的浏览器中打开了多个选项卡,并且在一个选项卡上打开了对话框,则会在所有选项卡上打开。

如果用户在一个标签页的对话框中关闭或接受,则其他选项卡不会关闭,因此用户必须通过所有标签并手动执行。

是否有一种方法可以让其他标签关​​闭该对话框,如果它至少在标签上关闭了?如果在一个标签上打开它,甚至不打开它。

2 个答案:

答案 0 :(得分:0)

最好是阻止其他人打开,因为关闭的事情要求你每隔几秒钟再做一次请求(或者使现有请求复杂化)。 所以基本上,你可以做的是在每个会话的基础上保存服务器上的弹出窗口的状态。 假设您已经拥有类似

的内容
$.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)。

答案 1 :(得分:0)

好吧,我一直想知道类似的问题并得到一个线索,所以我想在这里分享一下:

Javascript: sharing data between tabs

通过这种方式,您可以完全省略服务器端检查,从而减少AJAX调用次数,服务器负载,延迟(因为AJAX请求比本地通信慢)和流量。

只需确保让标签“检测”已消失的标签 大多数浏览器都支持beforeUnload事件,或者您存储时间戳,该时间戳由选项卡刷新,每隔几秒打开一次弹出窗口并由其他人检查。