2010-08-28 19 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