首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浏览器选项卡之间的通信:必须同步更新所有浏览器选项卡的页面标题

浏览器选项卡之间的通信:必须同步更新所有浏览器选项卡的页面标题
EN

Stack Overflow用户
提问于 2016-10-19 22:08:52
回答 2查看 240关注 0票数 1

我所拥有的:当从ajax调用中检索新数据时,页面标题会动态更新;如果访问此页面的选项卡-标题设置为默认值;如果我使用此页面打开第二个选项卡,则此选项卡的标题将设置为默认值(我必须修复此问题)

我需要:页面标题必须与此页面的所有选项卡相同。我的意思是,所有标签页的标题必须同步更新。

我目前的实现:

代码语言:javascript
复制
var prevData;
var newRequestsCounter = 0
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // retrieve and parse data. i skip this part
                  // newRequestsCounter is updating here
                  var visible = vis();
                  if (visible){
                      newRequestsCounter = 0
                      document.title = 'Default title'
                  } else {
                     if (newRequestsCounter == 0) {
                         document.title = 'Default title'
                     } else {
                         document.title =  'Dynamic title'
                     }
                  }

                  setTimeout(getRequests, 2000)
              }
          });
};

我试过使用intercom.js,但它不能正常工作。由于某些原因,intercom.on每次都会获得不同的数据。例如:第一个呼叫-默认标题,第二个呼叫-动态标题。我检查了一下debug,在执行这行setTimeout(getRequests,2000)之后出现了错误的数据。

代码语言:javascript
复制
var intercom = Intercom.getInstance();

intercom.on('notice', function(data) {
    document.title = data.title;
});
var prevData;
var newRequestsCounter = 0
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // retrieve and parse data. i skip this part
                  // newRequestsCounter is updating here
                  var visible = vis();
                  if (visible){
                      newRequestsCounter = 0
                      intercom.emit('notice', {title: 'Default title'});
                  } else {
                     if (newRequestsCounter == 0) {
                         intercom.emit('notice', {title: 'Default title'});
                     } else {
                         intercom.emit('notice', {title: 'Dynamic title'});
                     }
                  }

                  setTimeout(getRequests, 2000)
              }
          });
};

一般来说,我不太理解是否有可能在单个ajax回调范围内实现所需的功能。我尝试了下一个代码。在这种情况下,每次打开新选项卡时,localStorage中的变量"counter“都会递增。这意味着如果我期望两个选项卡的标题为"3“,我得到的是带有两个选项卡的"6”。

代码语言:javascript
复制
var intercom = Intercom.getInstance();

intercom.on('notice', function(data) {
    document.title = data.title;
});

if (localStorage.getItem("counter") === null){
    localStorage.setItem("counter", 0);
}
var getRequests = function(){
          $.ajax({
              async: true,
              type: "GET",
              url: "/get_requests/",
              success: function(data){
                  // skip part with retrieving and parsing data

                        var counter = localStorage.getItem("counter")
                        localStorage.setItem("counter", ++counter);
                  var visible = vis(); 
                  if (visible){
                      localStorage.setItem("counter", 0);
                      intercom.emit('notice', {title: 'Default'});
                  } else {
                     if (localStorage.getItem("counter") == 0 || localStorage.getItem("counter") === null) {
                         intercom.emit('notice', {title: 'Default'});
                     } else {
                         intercom.emit('notice', {title: '(' + localStorage.getItem("counter") + ') requests'});
                     }
                  }
                  setTimeout(getRequests, 2000)
              }
          });
};
getRequests();
EN

回答 2

Stack Overflow用户

发布于 2016-10-19 22:18:04

我在你的代码中不理解的部分是你在哪里打开一个新的浏览器标签。但是,如果在某个地方发生了这种情况,并且您想要将新选项卡的标题设置为其打开位置,您可以这样做:

代码语言:javascript
复制
var newTab = window.open('/page')
newTab.title = 'New Title';
票数 0
EN

Stack Overflow用户

发布于 2016-10-21 17:18:53

你是在使用某种长轮询吗?也许你可以将这些轮询调用与浏览器的时间同步。例如,每次轮询浏览器的时间秒都是偶数。然后,每个标签应同时发送其请求,并(几乎)同时获得更新其标题的答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40133768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档