Như đã biết, trong các ứng dụng web XHR (aka AJAX) không có lịch sử cho ứng dụng của bạn được xây dựng và nhấp vào nút làm mới thường di chuyển người dùng ra khỏi hoạt động hiện tại của họ. Tôi tình cờ gặp location.hash (ví dụ: http://anywhere/index.html#somehashvalue
) để phá vỡ vấn đề làm mới (sử dụng location.hash để thông báo cho ứng dụng của bạn về trạng thái hiện tại của nó và sử dụng trình xử lý tải trang để đặt lại trạng thái đó). Nó thực sự tốt đẹp và đơn giản.Là vị trí theo dõi.hash một giải pháp cho lịch sử trong các ứng dụng XHR?
Điều này khiến tôi suy nghĩ về việc sử dụng location.hash để theo dõi lịch sử ứng dụng của tôi. Tôi không muốn sử dụng các thư viện hiện có, bởi vì họ sử dụng iframe vv Vì vậy, đây là niken và đồng xu của tôi: khi tải trang ứng dụng tôi bắt đầu này:
setInterval(
function(){
if (location.hash !== appCache.currentHash) {
appCache.currentHash = location.hash;
appCache.history.push(location.hash);
/* ... [load state using the hash value] ... */
return true;
}
return false;
}, 250
);
(AppCache là một đối tượng được xác định trước có chứa các biến ứng dụng) Ý tưởng là kích hoạt mọi hành động trong ứng dụng từ giá trị băm. Trong các trình duyệt phong nha, thay đổi giá trị băm sẽ thêm một mục vào lịch sử, trong IE (< = 7) thì không. Trong tất cả các trình duyệt, điều hướng trở lại hoặc chuyển tiếp đến một trang có giá trị băm khác không kích hoạt làm mới trang. Đó là nơi mà chức năng intervalled mất hơn. Với chức năng mỗi khi thay đổi giá trị băm được phát hiện (lập trình, hoặc bằng cách nhấp vào trở lại hoặc chuyển tiếp) ứng dụng có thể thực hiện hành động thích hợp. Ứng dụng có thể theo dõi lịch sử riêng của nó và tôi sẽ có thể trình bày các nút lịch sử trong ứng dụng (đặc biệt là đối với người dùng IE).
Theo như tôi có thể nói điều này hoạt động qua trình duyệt và không có chi phí về bộ nhớ hoặc tài nguyên bộ vi xử lý. Vì vậy, câu hỏi của tôi là: đây có phải là giải pháp khả thi để quản lý lịch sử trong các ứng dụng XHR không? Những ưu và khuyết điểm là gì?
Cập nhật: vì tôi sử dụng khung homebrew của mình, tôi không muốn sử dụng một trong các khung công tác hiện có. Để có thể sử dụng location.hash trong IE và có nó trong lịch sử của nó quá, tôi tạo ra một kịch bản đơn giản (có, nó cần một iframe) mà có thể được sử dụng cho bạn. Tôi đã xuất bản nó on my site, vui lòng sử dụng/sửa đổi/phê bình nó.
Tôi đã nghĩ về điều đó. Có lẽ lịch sử lộn xộn cũng là vấn đề về kiểm soát ứng dụng - đảm bảo người dùng kết thúc ở nơi ứng dụng dẫn dắt anh ta/cô ấy, vì vậy vị trí của anh ấy/cô ấy rõ ràng không? – KooiInc