2012-11-05 51 views
0

我試圖圍繞使用HTML5 pushState的頭。它似乎很好。我可以添加狀態,回到我的瀏覽器,一切都很好。但是,當我刷新頁面時,它會導致404,因爲附加了pushState的URL實際上並不存在...pushState呆在同一頁

我試圖從一個文件夾中加載一切,使用index.html頁,因此該網址看起來像http://www.server.com/app_name/<something>app_name是一個包含index.html文件的文件夾)。

據我所知,hashbang被認爲是不好的,所以什麼pushState網址可以/應該使用,將保持在同一個實際頁面,並允許我刷新?

刷新後,我仍然能夠檢索狀態?

p.s.我不關心未啓用javascript的瀏覽器或維護向後兼容性。我不想更改任何.htaccess規則以使此便攜式和無配置。

回答

0

我最終放棄了pushState,而是使用了BBQ jQuery插件。

代碼看起來是這樣的:在頁面上

$(document).ready(function() { 
    // making sure a hashchange event is triggered for refresh 
    $(window).trigger('hashchange'); 
}); 

// this gets called on any page change, back button etc                                                            
$(window).bind('hashchange', function(e) { 
    // the fragment contains a hash value at the 
    // end of the url, e.g. #xyz 
    var url = $.param.fragment(); 
    // simulating a click on the appropriate link on the page 
    // based on the fragment 
    $('.panel a[href="#' + url + '"]').click() 
}); 

網址格式爲:

<a href="#xyz">link to xyz</a> 
0

你的問題是,您的Web服務器嘗試找到一個名爲東西文件在您APP_NAME文件夾。您必須將所有請求路由到/ app_name/*到您的index.html,然後使用DOM的位置對象設置適當的應用程序狀態。

如果不告訴服務器它應該做什麼,你不會走得太遠。這是歷史API的重點。如果你不想混淆.htaccess文件,你可能應該使用mod_rewrite或者sth編輯你的web服務器(Apache?)的配置。像那樣。

+0

沒錯,這就是我想要解決這個問題,不調整服務器的路由/ .htaccess規則。 – gingerlime