Về cơ bản bạn có hai "chậu" lịch sử mà bạn cần phải giả mạo. Trình duyệt và JQM.
JQM urlHistory
Bạn có thể sửa đổi JQMs urlHistory rất dễ dàng. Từ mã JQM:
urlHistory = {
// Array of pages that are visited during a single page load.
// Each has a url and optional transition, title, and pageUrl
// (which represents the file path, in cases where URL is obscured, such as dialogs)
stack: [],
// maintain an index number for the active page in the stack
activeIndex: 0,
// get active
getActive: function() {
return urlHistory.stack[urlHistory.activeIndex];
},
getPrev: function() {
return urlHistory.stack[urlHistory.activeIndex - 1];
},
getNext: function() {
return urlHistory.stack[urlHistory.activeIndex + 1];
},
// addNew is used whenever a new page is added
addNew: function (url, transition, title, pageUrl, role) {
// if there's forward history, wipe it
if (urlHistory.getNext()) {
urlHistory.clearForward();
}
urlHistory.stack.push({
url: url,
transition: transition,
title: title,
pageUrl: pageUrl,
role: role
});
urlHistory.activeIndex = urlHistory.stack.length - 1;
},
//wipe urls ahead of active index
clearForward: function() {
urlHistory.stack = urlHistory.stack.slice(0, urlHistory.activeIndex + 1);
}
};
Vì vậy, tất cả các chức năng trên có sẵn và có thể được gọi như thế này ví dụ:
$.mobile.urlHistory.clearForward();
Theo dõi lịch sử của bạn, đặt một nơi nào đó và lắng nghe cho pageChange (một lần chuyển tiếp được thực hiện) để xem những gì là bên trong urlHistory:
$(document).on('pagechange', 'div:jqmData(role="page")', function(){
console.log($.mobile.urlHistory.stack);
});
Từ đó bạn có thể bắt đầu để xem những gì nên trong lịch sử và làm sạch nó lên như bạn cần.
Tôi đang sử dụng điều này rất nhiều cho lớp điều hướng của riêng mình để sửa đổi nội dung được lưu trữ trong urlHistory và những gì không được lưu trữ. Sync-ing với trình duyệt là phần khó khăn ...
On sync-ing với trình duyệt:
Trong lớp chuyển hướng của tôi Tôi chỉ loại bỏ các mục đôi từ urlHistory, vì vậy luôn luôn có một trang để đi đến (và không phải hai), khi bạn nhấp vào nút quay lại trình duyệt. Trong trường hợp của bạn, bạn sẽ có 4 mục trong lịch sử trình duyệt, nhưng nếu bạn xóa 2 mục nhập khỏi JQM urlHistory, bạn sẽ có hai trang "không cần phải" khi nút quay lại được nhấp.Vì vậy, nếu lịch sử trình duyệt của bạn trông như thế này:
www.google.com
www.somePage.com
www.YOUR_APP.com = page1
page2
page3
page4
Và remove page2 bạn và page3, nhấn back-button nên kết quả trong:
1st back-click = page4 > page1
2nd back-click = page1 > www.somePage.com [because you removed page3]
3rd back-click = www.somePage.com > www.google.com [because you removed page2]
Một cách giải quyết lý thuyết sẽ là:
- giữ bộ đếm cách "sâu" bạn đi vào một trang
- xóa các trang khỏi địa chỉ JQM urlHistory và nhận giá trị "jump" = counter-removedPages
- trên nhấp chuột trình duyệt tiếp theo, nhảy x window.history (mặt sau) và chỉ cho phép chuyển đổi JQM. Bạn URL sẽ thư giãn page4> page3> page2> page1 trong một bước và bạn chỉ cho phép JQM để làm một sự chuyển tiếp duy nhất từ page4 để page1
- kiểm tra những gì trong urlHistory và dọn dẹp sau "ba trở lại" của bạn
Hãy coi chừng đây là không phải là giải pháp tối ưu và bạn phải cân nhắc nhiều thứ (người dùng nhấp vào một nơi khác trước khi quay lại v.v.). Tôi đã cố gắng mãi mãi để có được một cái gì đó như thế này để làm việc trong một thiết lập phức tạp hơn và cuối cùng chỉ dừng lại bằng cách sử dụng nó, bởi vì nó không bao giờ làm việc như nó phải. Nhưng đối với một thiết lập đơn giản, nó có thể hoạt động rất tốt.
Xin chúc mừng các vị thần cũ và mới! –
Trong JSF, ví dụ, tôi đã sử dụng cách tiếp cận này để ghi đè lên nút bấm 'data-rel = "back" 'của jQuery Mobile:' window.history.go (- # {managedBean.count}); ', mà sẽ biến thành 'window.history.go (-3);' nếu bạn đang ở trang 4, chẳng hạn. – falsarella
Tôi không tìm thấy $ .mobile.urlHistory trong tài liệu jqm ... http://api.jquerymobile.com/?s=urlHistory – dsdsdsdsd