2015-12-06 16 views
9

Tôi có ứng dụng jQuery Mobile mà tôi đang phát triển. Theo mặc định, jQuery Mobile sử dụng pushState để cho phép nút quay lại của trình duyệt hoạt động linh hoạt.Bật nút quay lại mà không cho phép thay đổi thủ công qua URL

Bây giờ, ứng dụng của tôi có nghĩa là phải thay đổi trang động và người dùng phải luôn đến trang đầu khi tải ứng dụng.

Vấn đề là, jQuery Mobile cập nhật băm của trang trong URL bất cứ khi nào tôi truy cập trang trong ứng dụng. Bây giờ, nếu người dùng nhập cùng một băm trong ứng dụng, jQuery Mobile sẽ tự động đưa họ đến trang đó (khi tôi muốn họ được xử lý bởi mã của tôi). Ngoài ra, nếu họ làm mới trang, tôi muốn mã của tôi đưa họ trở lại vị trí của họ, chứ không phải chuyển trực tiếp đến mã băm mà URL đã có.

Để ngăn chặn điều này, tôi đã cố gắng để thêm đoạn mã sau trong mobileinit sự kiện:

$.mobile.hashListeningEnabled = false; 

này hoạt động, nhưng nó cũng vô hiệu hóa pushState cập nhật, do đó phá vỡ nút quay lại, mà tôi don' t muốn xảy ra.

Cách nào tốt nhất để cho phép người dùng sử dụng nút quay lại trong khi vẫn không cho phép di chuyển thủ công giữa các trang?

+0

Bạn đã đầu tư 100 đại diện cho câu hỏi này; bạn có hai câu trả lời, chúng có giúp bạn khắc phục sự cố không? – Omar

Trả lời

6

tôi không có quá nhiều yếu tố để mô tả một giải pháp khả thi và chính xác cho vấn đề của bạn, nhưng một điều dễ dàng nên có này:

trên tất cả các liên kết trên trang của bạn mà mất với nhau đính kèm một chức năng như này:

$(DOMElem).on("click",function(){ 
    sessionStorage["urlChangedByLink"] = "true"; 
}); 

trên trang cùng bạn có thể thử nếu không có vấn đề với điều này:

$(window).on("navigate", function(event, data) { 
    if(sessionStorage["urlChangedByLink"] == "true") 
    $.mobile.hashListeningEnabled = true; 
    else 
    $.mobile.hashListeningEnabled = false; 
}); 

Hoặc này, trên trang khác mà bạn kiểm tra xem variabl lưu trữ này e exsist và hơn làm cho hoạt động của bạn:

if(sessionStorage["urlChangedByLink"] == "true") 
    continue navigation... 
else 
    window.history.back(); 
+0

một đề xuất tuyệt vời Emanuele! Tôi đã sử dụng localStorage trong quá khứ để hỗ trợ tôi trong các tai ương điều hướng của mình. Tôi đã phải điều hướng một thư mục, vì vậy tôi đã lưu trữ mã gồm 3 chữ số cho quận nên tôi luôn biết mình đã ở đâu! –

+0

Không nên có nơi bạn đặt sessionStorage ["urlChangedByLink"] thành false? nếu không nó sẽ luôn luôn đúng. Tôi đoán ở cuối cửa sổ điều hướng xử lý chúng ta nên đặt nó thành false. –

+0

Không đúng. Điều này không bao gồm trang hiện tại làm mới hoặc truy cập các trang theo cách thủ công bằng băm. Tôi tự hỏi tại sao người dùng upvote một câu trả lời hoàn toàn sai. – Omar

0

một lựa chọn ở đây là để thiết lập các data-url cho mỗi trang web của bạn, bạn chỉ cần thêm thuộc tính vào trang của bạn div và đặt nó bằng trang chủ của bạn theo cách đó url cho trang được hiển thị trong lịch sử không có giá trị băm (hoặc bạn có thể bao gồm các giá trị của riêng bạn). tài liệu về điều này được giải thích tốt hơn in the jquery mobile documentation

Các vấn đề liên quan