gpt4 book ai didi

javascript - 浏览器选项卡之间的通信 : page titles must be updated synchronously for all browser tabs

转载 作者:行者123 更新时间:2023-11-28 05:26:21 25 4
gpt4 key购买 nike

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

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

我当前的实现:

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)后出现了错误的数据。

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 回调范围内实现所需的功能。我尝试了下一个代码。在这种情况下,每次我打开新选项卡时,本地存储中的变量“计数器”都会递增。这意味着如果我期望两个选项卡的标题为“3”,我会得到带有两个选项卡的“6”。

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();

最佳答案

我在代码中不理解的部分是您打开新浏览器选项卡的位置。但是,如果这种情况发生在某个地方,并且您想要将该新选项卡的标题设置为其打开位置,您可以执行以下操作:

var newTab = window.open('/page')
newTab.title = 'New Title';

关于javascript - 浏览器选项卡之间的通信 : page titles must be updated synchronously for all browser tabs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com