2014-04-25 28 views
2

我使用pjax,我明白它是如何工作的。我用JS處理所有pjax邏輯,並且在某些情況下,我想「僞裝」一個新的頁面加載,而不用pjax實際上獲取任何數據。pjax沒有做出實際的請求/使用pjax沒有連接到服務器的更改歷史記錄

我的問題是,我怎樣才能設置一個新的歷史記錄與pjax沒有實際連接到服務器的pjax?基本上像往常一樣使用pjax,但不連接到服務器。

我知道這不是pjax的實際用途或使用,但我不想加載history.js或類似的東西只是爲了我的這個小例外。理論上這應該由pjax來處理......

回答

1

只需使用history.pushState()即可。 history是內建的HTML5功能,可讓您在不重新加載頁面的情況下添加新的歷史記錄條目。因爲調用該函數實際上並不會觸發popstate事件,所以不應該影響pjax。

+0

感謝您的建議。我會試試看,明天報告回來:) – MMachinegun

+0

當然。如果出現問題,請確保接受任何答案。 –

+0

到目前爲止,我已經發現了大部分東西。你的提示將我推向了正確的方向,再次感謝!無論如何,我分別使用'pjax'和'history.pushState'遇到了一個問題:我也有'pjax:popstate'的函數,所以當我使用'history.pushState()'時,函數不會被觸發通過'pjax:popstate' ..因此,如果我只能按照規定使用'pjax',那真的會有幫助。 – MMachinegun

1

我推薦使用history.replaceState(newUrl),否則,如果您使用history.pushState(newUrl),您還應該正確處理「後退按鈕」事件。另請參閱支持哪些瀏覽器http://caniuse.com/#search=pushstate。還要考慮到,在某些瀏覽器中,由於安全原因,它不能以全屏模式工作。

我建議編寫自己的功能,如:

var historyChangeState = function (newUrl) { 
    history.replaceState(newUrl) 
    // something else to manage 
} 

這樣你就可以調整它的未來。

+0

雖然我不會使用replaceState本身我喜歡與分離功能處理邏輯的想法。無論如何感謝您的回答... – MMachinegun

相關問題