当前位置:  开发笔记 > 编程语言 > 正文

如何使用后退按钮检测用户是否已访问某个页面?

如何解决《如何使用后退按钮检测用户是否已访问某个页面?》经验,为你挑选了3个好方法。

这个问题类似于用户在浏览器上点击按钮时的跟踪,但不一样......我有一个解决方案,并将其发布在此处以供参考和反馈.如果有人有更好的选择,我全都耳朵!

情况是我有一个"就地编辑"的页面,一个la flickr.即有一个"点击这里添加描述"DIV,点击时变成带有保存和取消按钮的TEXTAREA.单击"保存"将数据发布到服务器以更新数据库,并将新描述放在DIV中以代替TEXTAREA.如果刷新页面,则会使用"单击以编辑"选项从数据库中显示新描述.这些天相当标准的Web 2.0.

问题是,如果:

    页面加载时没有描述

    用户添加了描述

    通过单击链接导航页面

    用户单击后退按钮

然后显示的内容(来自浏览器的缓存)是没有包含新描述的动态修改的DIV的页面版本.

这是一个相当大的问题,因为用户认为他们的更新已丢失,并且不一定了解他们需要刷新页面才能看到更改.

因此,问题是:如何将页面标记为在加载后进行修改,然后检测用户何时"返回"并在该情况下强制刷新?



1> Nick White..:

使用隐藏的表格.当您重新加载或点击后退按钮返回页面时,表单数据(通常)会保留在浏览器中.以下内容位于您的页面中(可能位于底部附近):

在您的JavaScript中,您需要以下内容:

var dirty_bit = document.getElementById('page_is_dirty');
if (dirty_bit.value == '1') window.location.reload();
function mark_page_dirty() {
    dirty_bit.value = '1';
}

在完全解析html之后,必须执行嗅探表单的js,但如果用户延迟是一个严重问题,您可以将表单和js内联在页面顶部(js秒).


在某些浏览器中,不会保留隐藏的标记.因此,您可以使用隐藏文本标记而不是使用隐藏的输入标记.
"表单数据在浏览器中保留(通常)" - 你能扩展它吗?是不是在某些浏览器中保留了?还是在某些情况下?
实际上,让我列出所有我认为出错的方法.(1)Opera保持页面的完整状态,不会重新执行js.(2)如果调整了缓存设置以强制页面从后台按钮上的服务器加载,则表单数据可能会丢失,这对于此问题的目的是正常的.(3)手机浏览器的缓存要小得多,浏览器可能已经从缓存中删除了页面(这不是出于问题).
这对我很有用.我确信它有崩溃的情况,但每个解决方案都会解决这个问题.

2> Bassem..:

对于这个老问题,这是一个非常简单的现代解决方案.

if (window.performance && window.performance.navigation.type == window.performance.navigation.TYPE_BACK_FORWARD) {
    alert('Got here using the browser "Back" or "Forward" button.');
}

window.performance目前支持所有主流浏览器.


`window.performance.navigation.TYPE_BACK_FORWARD`是一个常量,总是等于2.所以它只是用于比较.

3> Drew Baker..:

这篇文章解释了它.请参阅以下代码:http: //www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/


    
        
    
    
        Click for WebKit
    

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有