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

时间:2010-08-28 01:36:07

标签: javascript ajax

好的,所以现在风靡一时的是这样的网站:

  • mysite.com /
  • mysite.com/about
  • mysite.com/contact

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

  • mysite.com /#/
  • mysite.com /#/约
  • mysite.com /#/接触

这一切都很好。我觉得这一切都很顺利。

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

我有它的工作,所以如果他们到达“mysite.com/about”,该页面将自行加载(无重定向),然后通过ajax加载后的所有点击,但预片段URL doens'改变。例如如果他们到达“mysite.com/about”然后点击“联系”,新的URL将是“mysite.com/about#/contact”。我真的不喜欢那样,但这很难看。

我能想到的唯一方法是自动将到达“mysite.com/about”的用户重定向到“mysite.com/#/about”是在标题中只有一些javascript,如果页面是没有通过ajax加载。该代码看起来像这样($ = 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 个答案:

答案 0 :(得分:0)

这种行为就像新推特。如果您输入网址:

http://twitter.com/dinizz

您将被重定向到:

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

我意识到这已经完成,不是使用javascript而是在服务器端。我正在寻找一个解决方案来实现这个使用ruby on rails。 虽然我建议你看一下这篇文章:Making AJAX Applications Crawlable