2010-07-14 142 views
13

我很好奇,如果有一种方法来专门检测JavaScript中的浏览器刷新事件。我们使用jQuery.address插件为AJAX功能提供前进和后退按钮功能。我面临的问题是,这个插件似乎没有检测到用户是否刷新了页面。在Javascript中检测浏览器刷新

每次用户在浏览器历史记录中向前或向后移动时,都会执行此代码。当用户刷新时,我也希望它可以运行。

$.address.init(function(event) { 
}).change(function(event) { 

     SummaryDiv.SwapPanels(newPanelID); 
    } 

任何想法?

回答

5

我的天真尝试将简单地将当前状态存储到每个更改后的cookie中,并在每次页面加载时重新加载它们。

+0

这就是我将如何做,而不查找其他方法。但要知道,这种方法很容易被用户避免/编辑。 – 2010-07-14 15:54:22

+5

由于可以通过禁用JavaScript的整个网站:) – LukeN 2010-07-14 15:55:40

+0

我试试这个。这似乎是一个常见的解决方法。 – Nick 2010-07-14 15:57:14

1

在页面刷新时,JavaScript也重新加载。所以你不能指定你想直接在jQuery的ready方法中发生什么?

1

我能够迫使改变事件代码由

window.onload = $.address.update(function(){  
... 
}) 
5

沿着这些线路上运行的刷新,我有它的行为,我不想再重复,如果刷新页面,所以我按照编号this answer中所述的方式编程改变了散列。

checkRefresh: function() { 
    if (document.location.hash === '#visited') { 
     console.log('Refreshed'); 
     return true; 
    } else { 
     document.location.hash = 'visited'; 
     return false; 
    } 
} 

UPDATE

我发现至少移动Safari浏览器会忽略哈希如果自动发生(再次观看之前,从缓存中清除例如页面数据)刷新。我结束了使用更复杂的解决方案described here