2010-08-28 38 views
2

好了,所有的愤怒,这些天是有这样一个网站:完整的Ajax站点,自动从“普通”URL重定向到Ajax(片段)URL?

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

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

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

这一切都很好。我已经完成了所有工作。

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

我有它的工作,所以如果他们到达“mysite.com/about”,该页面将自己加载罚款(没有重定向),然后通过ajax负载后的所有点击,但前片段URL运行不会改变。例如如果他们到达“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片段,而不是整个包装器,直到我手动刷新。 (尽管只有Firefox,但Chrome并不这样做)。我从来没有见过这样的事情。

我试过使用setTimeout,所以它不会做重定向,直到页面完全加载后,但同样的事情发生。基本上,据我所知,这只适用于如果片段放在那里作为用户操作(单击)的结果,而不是自动。

所以我的问题是什么自动重定向一个JavaScript的浏览器从“普通”的URL到Ajax的URL?任何人都有这样的经验吗?我知道有些网站会这样做 - 例如http://rdio.com(音乐网站)。没有古怪发生在那里,但我无法弄清楚他们是如何做的。

感谢您的任何建议。

回答

0

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

http://twitter.com/dinizz 

您将被重定向到:

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

我意识到,这是做,而不是与JavaScript,但在服务器端。我正在寻找一种解决方案来实现这个在rails上使用ruby。 虽然我建议你看看这篇文章:Making AJAX Applications Crawlable