在Javascript中检测浏览器刷新

Posted

技术标签:

【中文标题】在Javascript中检测浏览器刷新【英文标题】:Detect Browser Refresh in Javascript 【发布时间】:2011-03-15 22:24:57 【问题描述】:

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

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

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

        SummaryDiv.SwapPanels(newPanelID);
    

有什么想法吗?

【问题讨论】:

【参考方案1】:

按照这些思路,我有一个页面,如果刷新,我不想重复其行为,因此我按照this answer 中的描述以编程方式更改了哈希。

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

更新

我发现,如果自动刷新(例如,在再次查看之前从缓存中删除页面数据),至少 Mobile Safari 会忽略哈希。我最终使用了一个更复杂的解决方案described here。

【讨论】:

【参考方案2】:

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

【讨论】:

这就是我的做法,无需查找其他方法。但要知道,这种方法很容易被用户避免/编辑。 整个网站都可以禁用 Javascript :)【参考方案3】:

在网上为您找到了这个...

既有 javascript 巧妙的方法,也有 cookie 方法。

http://www.tedpavlic.com/post_detect_refresh_with_javascript.php

【讨论】:

【参考方案4】:

在页面刷新时,javascript 也会重新加载。那么你不能直接在jQuery的ready方法中指定你想要发生的事情吗?

【讨论】:

【参考方案5】:

我能够强制更改事件代码在刷新时运行

  window.onload = $.address.update(function()    
...
)

【讨论】:

以上是关于在Javascript中检测浏览器刷新的主要内容,如果未能解决你的问题,请参考以下文章

Javascript ajax 仅在需要时刷新

检测刷新和重新加载之间的区别

我可以使用 javascript 强制浏览器“刷新”任何待处理的布局更改吗?

DevExpress MVC GridView 刷新

检测浏览器刷新

使用 Javascript 将十进制转换为十六进制或 Unicode