2012-09-25 103 views
0

我正在使用具有動態內容的網站。重寫URL散列以獲取變量

當您單擊一篇文章時,它會更改爲使用推送狀態的地址。

例子:

http://www.some-site.com/news/ - 點擊一條新聞

http://www.some-site.com/news/dynamic-url/前 - 點擊新聞項目之後

但作爲pushState的並不在IE或以上的瀏覽器,我已經重寫它使用jQuery.address因此它改變了URL中的哈希而不是IE。

現在的問題,是說某人發送鏈接到現場的朋友,他們從Chrome中複製和他們的朋友使用IE瀏覽器,它會開始追加新的有該網址。

例子:

http://www.some-site.com/news/dynamic-url/ - URL發送給朋友

http://www.some-site.com/news/dynamic-url/#!/dynamic-url - 朋友後URL訪問該網站

所以,我卡在如何改寫/重定向他們。因爲散列永遠不會被髮送到Apache。 我在推特上看到過,他們正是我想要的,但我無法弄清楚如何。

https://twitter.com/#!/google被重定向到https://twitter.com/google和它在IE工作。

任何幫助非常感謝,如果你不明白請請我詳細說明。

正如David Thomas所建議的那樣,這裏是函數。

var permalink = function(title, id, permalink){ 
    var current = siteUrl + type + (order ? '/orderBy/' + order : ''); 
    var newUrl = current + '/' + permalink + '/'; 
    if(jQuery.browser.msie){ 
     newUrl = '/' + permalink + '/'; 
     jQuery.address.value(newUrl); 
    } 
    else{ 
     stateNum++; 
     window.history.pushState({state: stateNum}, title, newUrl); 
    } 
    jQuery('title').html('SITE - ' + title); 
} 
+0

我想你將不得不發佈這樣做的函數,因爲無論你在這裏得到的答案應該或將與該函數集成在一起。 –

+0

將其添加到OP中。 – CharliePrynn

+0

Twitter想要[徹底刪除hashbangs](https://www.google.com/search?q=twitter+without+hashbangs)。它更簡單。你真的需要在IE上提供AJAX支持嗎? –

回答

0

想了一會兒,我只能找到一個解決方案。

如果有人遇到類似的情況,我會在這裏發佈。

我的解決方案,有點哈克。如果瀏覽器是IE瀏覽器,並且在某個點後有一段url,那麼我將它記爲新聞項目的名稱。一旦我有了名字,我將它們重定向到合適的URL。

var permalink = function(title, id, permalink){ 
    var current = siteUrl + type + (order ? '/orderBy/' + order : ''); 
    var newUrl = '/' + permalink + '/'; 
    if(jQuery.browser.msie){ 
     jQuery.address.value(newUrl); 
    } 
    else{ 
     current = siteUrl + type + (order ? '/orderBy/' + order : ''); 
     newUrl = current + '/' + permalink + '/'; 
     stateNum++; 
     window.history.pushState({state: stateNum}, title, newUrl); 
    } 
    jQuery('title').html('SITE - ' + title); 
} 
jQuery(document).ready(function(){ 
    jQuery.address.crawlable(true); 
    if(jQuery.browser.msie){ 
     if(jQuery.address.value() == '/'){ 
      var currentPermalink = window.location.toString(); 
      currentPermalink = currentPermalink.split(type); 
      if(currentPermalink[1] !== '/'){ 
       window.location = siteUrl + type + '/#!' + currentPermalink[1]; 
       jQuery.address.value(newUrl); 
      } 
     } 
    } 
}); 
0

你需要做的就是要麼使用插件(如jQuery的歷史),或讓事件自己檢查哈希改變什麼。然後,你閱讀散列(你去掉「!」),然後處理你需要的散列。你可能想對它做一個Ajax(比如加載域/哈希),並把內容放在頁面的某個地方。

這是明確的嗎?

+0

整個網站的工作原理是,它在加載頁面時動態地加載內容,並且它還會更改散列。問題是,如果你轉到IE中的頁面,它會將散列追加到舊URL中。就像我的例子一樣。 – CharliePrynn