代码之家  ›  专栏  ›  技术社区  ›  KooiInc

监控location.hash是XHR应用程序中历史记录的解决方案吗?

  •  19
  • KooiInc  · 技术社区  · 16 年前

    众所周知,在XHR(又名AJAX)web应用程序中,您的应用程序没有历史记录,点击刷新按钮通常会让用户退出当前活动。我偶然发现了location.hash(例如。 http://anywhere/index.html#somehashvalue

    这让我开始考虑使用location.hash来跟踪我的应用程序的历史记录。我不想使用现有的库,因为它们使用iframe等。所以这是我的五分钱:当应用程序页面加载时,我开始执行以下操作:

    setInterval(
           function(){
               if (location.hash !== appCache.currentHash) {
                   appCache.currentHash = location.hash;
                   appCache.history.push(location.hash);
                   /* ... [load state using the hash value] ... */
                   return true;
               }
               return false;
           }, 250
     );
    

    更新:因为我使用自制程序框架,所以我不想使用现有的框架。为了能够在IE中使用location.hash并将其纳入历史记录,我创建了一个简单的脚本(是的,它需要一个iframe),这可能对你有用。我发表了 on my site

    3 回复  |  直到 15 年前
        1
  •  8
  •   Crescent Fresh    16 年前

    window.location.hash 在大多数情况下,基于解决方案可以解决所有三个问题: hash iframe

    然而,我只是想指出,可以在不进行监控的情况下使用仅iframe的解决方案 window.location哈希 这也是一个非常有效的解决方案。

    顺便说一句,这也解决了[软]“刷新”问题。它们通过“链接到此页面”按钮单独解决书签功能。

        2
  •  5
  •   JeremyWeir    16 年前

    我认为你很难知道用户是前进还是后退。 假设url starts/myapp#page1开始跟踪状态。 然后用户做了一些事情,使url/myapp#page2

    另一个缺点是,用户在选择您的自定义后退按钮之前,总是会先选择浏览器的后退按钮。我有一种感觉,每250毫秒阅读历史的延迟也会很明显。也许你可以把时间间隔做得更紧,但我不知道这是否会让事情变得糟糕。

    我使用过yui的历史管理器,虽然它在所有浏览器(尤其是ie6)中都不能完全工作,但它已被许多用户和开发人员使用。他们使用的模式也非常灵活。

        3
  •  2
  •   Russell Leggett    15 年前
    推荐文章