Javascript 无法检测实际页面重新加载
我正在使用javascript中的套接字来发送数据。下面是代码片段Javascript 无法检测实际页面重新加载,javascript,jquery,html,local-storage,session-storage,Javascript,Jquery,Html,Local Storage,Session Storage,我正在使用javascript中的套接字来发送数据。下面是代码片段 socket.on('my response', function(msg) { $('#log').append('<p>Received: ' + msg.data + '</p>'); /* if (window.performance) { console.info("window.performance work's fine on this browse
socket.on('my response', function(msg) {
$('#log').append('<p>Received: ' + msg.data + '</p>');
/*
if (window.performance) {
console.info("window.performance work's fine on this browser");
}
if (performance.navigation.type == 1) {
console.info( "This page is reloaded" );
} else {
console.info( "This page is not reloaded");
} */
document.getElementById('div_id').innerHTML += msg.data + "<br>";
});
socket.on('my response',函数(msg){
$(“#log”).append(“接收:”+msg.data+“”);
/*
if(窗口性能){
console.info(“window.performance工作在这个浏览器上很好”);
}
if(performance.navigation.type==1){
console.info(“此页面已重新加载”);
}否则{
console.info(“此页面未重新加载”);
} */
document.getElementById('div_id')。innerHTML+=msg.data+“
”;
});
问题是,我在div上显示的数据在重新加载页面后会被清除。我想保留数据并继续从msg.data
添加数据,即使在重新加载网页之后也是如此。我怎样才能做到这一点?我试图使用上面代码段中的注释部分检测页面重新加载,但每次我收到msg
时,它都会将其检测为页面重新加载事件
更新1
如果检测重新加载事件并使用
会话存储
是最好的方法,那么我可能必须强调我的主要问题,即检测重新加载事件。它正在打印每次我在msg.data
中获取数据时,都会重新加载此页面(使用代码段的注释部分检测页面重新加载事件)。我想检测我从代码的其他模块中使用的唯一手动重新加载和窗口.location.reload
。您可以检测页面加载事件,然后只保存您获得的数据,直到触发页面刷新,然后用追加的内容填充它。。例如,但更好的方法是检测文档是否准备就绪。因为这样你就不必像stavm刚才说的那样等待css和图像加载了
//store data first
$( document ).ready(function() {
// your code here
});
常用的方法是缓存数据。您可以将msg.data缓存到localStorage
,重新加载时,您首先尝试从localStorage获取数据,如果有,则显示它;然后,保持套接字连接并进行更新。您的代码很好,它可以检测到您想要的内容。
但是javascript变量在重新加载页面后会被清除,这是自然的、不可避免的
您可以使用HTML5本地存储或Cookie,每种都有自己的优缺点
请参考以下链接:
逻辑:
$(function() {
if(// This page is **not reloaded** ) {
// **clear** local storage / cookies
}
//load / append data to **local storage / cookies**
//populate data **from local storage / cookies**
});
试试这样的
function reloadFunction() {
//set property in local storage;
window.location.reload();
}
$(function() {
if( // local storage property exists) {
// reloaded by code
// clear local storage property;
} else {
// reloaded manually
}
});
在服务器端,创建一个带有增量ID的var,并将其发送给客户端。每次重新加载时,将此变量与客户端上的变量进行比较。将其固定在标记中,将数据放入会话存储,在文档读取时将会话存储与div的内容进行比较。我的主要问题是检测网页的重新加载事件。我尝试用各种方式检测,但正如我在问题中提到的,它检测套接字的我的响应
事件也作为页面重新加载事件。如何避免这种情况?我会使用document.ready
。等待CSS、图像和所有其他内容都没有意义assets@phanny因为sockets.on会触发页面重新加载事件afaik。这就是它被检测到的原因。它没有按我希望的那样工作。它正在显示每次我收到msg.data
时,都会重新加载此页面。我希望它只检测手动重新加载和window.location.reload()
,这是我在代码的其他各个模块中拥有的。在调用window.location.reload()之前在本地存储中设置一个值,如果在页面加载时它存在,这意味着你的代码完成了它。加载页面后清除该值。如果有人刷新该值,则在加载页面时该值不存在。