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

完整的Ajax站点,自动从“普通”URL重定向到Ajax(片段)URL?

  •  2
  • Sean  · 技术社区  · 16 年前

    好吧,现在流行的是这样一个网站:

    • 我的网站。com/
    • 我的网站。com/about
    • 我的网站。通讯/联络

    但是如果用户启用了Javascript,那么让他们使用Ajax浏览这些页面:

    • 我的网站。com/#/
    • 我的网站。com/#/关于
    • 我的网站。com/#/联系

    这一切都很好。这一切我都做得很好。

    我的问题是,如果用户到达“mysite.com/about”,如果他们有Javascript,我想立即自动将他们重定向到“mysite.com/#/about”。

    我让它工作,所以如果他们到达“mysite.com/about”,该页面将自行加载(无重定向),然后通过ajax加载后所有点击,但片段前的URL不会改变。e、 g.如果他们到达“mysite.com/about”,然后单击“contact”,新的URL将是“mysite.com/about#/contact”。但我真的不喜欢那样,太难看了。

    我能想到的自动将到达“mysite.com/about”的用户重定向到“mysite.com/#/about”的唯一方法是在页眉中添加一些javascript,只有在页面未通过ajax加载时才会运行这些javascript。代码如下($=jQuery):

    $(function(){ 
      if( !location.hash || location.hash.substr(1,1) != '/' ) {
        location.replace( location.protocol+'//'+location.hostname+'/#'+location.pathname+location.search ); 
      }
    });
    

    这在技术上是可行的,但会导致一些非常奇怪的行为。例如,通常,当您“查看源代码”一个包含一些ajax内容的页面时,该ajax内容将不在源代码中,因为您正在查看原始页面的源代码。嗯,当我在这样重定向后查看源代码时,我看到的代码只是通过Ajax加载的代码——我以前从未见过这样的代码。这在Firefox 3.6和Chrome 6.0中都会发生。我还没有用其他浏览器验证过,但两个使用完全不同引擎的浏览器表现出相同的行为表明我做了坏事(例如,不只是FF或Chrome的错误)。

    因此,不知怎的,浏览器认为我所在的页面“就是”Ajax页面。我可以继续浏览,它工作正常,但如果我关闭Firefox并重新打开它(它重新打开了我打开的页面),它只会重新加载页面的Ajax片段,而不是整个包装,直到我手动刷新。(不过Chrome不这么做,只有Firefox)。我从没见过这样的事。

    我尝试过使用setTimeout,这样它在页面完全加载之前不会执行重定向,但同样的情况也会发生。基本上,据我所知,只有当片段作为用户操作(单击)的结果放在那里时,这才有效,而不是自动地。

    所以我的问题是-什么是最好的方法 自动地 将支持Javascript的浏览器从“普通”URL重定向到Ajax URL?有人有这方面的经验吗?我知道有这样的网站——例如。, http://rdio.com (音乐网站)。那里没有奇怪的事情发生,但我不知道他们是怎么做的。

    谢谢你的建议。

    1 回复  |  直到 16 年前
        1
  •  0
  •   Thiago Diniz    15 年前

    这种行为就像新的twitter。如果键入URL:

    http://twitter.com/dinizz
    

    您将被重定向到:

    http://twitter.com/#!/dinizz
    

    我意识到这不是用javascript而是在服务器端完成的。我正在寻找一种使用ruby on rails实现这一点的解决方案。 尽管我建议你看看这篇文章: Making AJAX Applications Crawlable