4
隨着HTML5 API歷史消防window.onpopstate事件,我創建類似下面:HTML5 API歷史 - 不要在第一頁加載
(function (d, w) {
$(function() {
$("#indicator").hide();
if (typeof history.pushState !== 'undefined') {
$("#citylinks a").click(function (e) {
history.pushState({ path: this.href }, '', this.href);
act(this.href);
e.preventDefault();
});
w.onpopstate = function (event) {
act(d.location);
};
}
function act(location) {
$("#results").hide();
$("#indicator").show();
$.getJSON(location, function (data) {
$("#results").html(data.result);
$("#results").fadeIn();
$("#indicator").hide();
});
}
});
})(document, window);
完整的代碼是在這裏:
我在這裏的問題是,我不想在第一次從服務器發送頁面時觸發w.onpopstate
事件。
我想這樣做的原因是我想在服務器端填充頁面,我不希望客戶端代碼這樣做。如果我刪除w.onpopstate
事件,我將無法趕上history.go()
事件。
有什麼辦法可以解決這個問題嗎?
不錯的解決方案。有一件事是它在每個'windows.onpopstate'事件上運行。我試圖阻止它(通過檢查'window.onpopstate'事件,如果'null'或'undefined')但不能得到它的工作。 – tugberk
這是一個黑客解決方案。相反,您可以嘗試這樣的http://stackoverflow.com/a/11453389/191551。 –
@Ryan:也許這很冒險,但我真的沒有看到它。如果有的話,它更有效率,因爲它不需要額外檢查你鏈接的例子。當然,我們正在談論微秒,這並不重要,但在另一方面,我沒有看到使用該技術的任何錯誤。這是我見過的很多次在很多腳本中都使用過的,很不幸,現在不能及時回想起來:-p –