2015-11-05 15 views
5

Tôi có một ứng dụng trang duy nhất mà trang không bao giờ được tải xuống. Tôi đang sử dụng # trong url và sử dụng javascript để phát hiện hashchange và sau đó cập nhật giao diện người dùng bằng JS và AJAX ... và tôi không muốn các nút tiến và lùi để thực hiện yêu cầu bổ sung cho máy chủ.Ngăn các nút quay lại và chuyển tiếp tải lại trang trong một ứng dụng trang đơn

Hiện nay, lần đầu tiên người sử dụng ban đầu đến với trang web, yêu cầu máy chủ được thực hiện (đó là OK)

Processing by MyController#index as HTML 

Mục tiêu của tôi là dành cho yêu cầu máy chủ này chỉ xảy ra một lần trong thời gian người sử dụng thời gian tại trang web ... mỗi lần họ nhấp vào bất kỳ liên kết nào khác, tôi chỉ sử dụng "#" trong url để ngăn yêu cầu máy chủ mới ... vì vậy tất cả các thẻ "a" của tôi trông giống như thế này

<a href="#page1/

Vấn đề tôi gặp phải là nhấp vào thứ e trở lại và nút về phía trước gây nên nghe JS hashchange của tôi (đó là những gì tôi muốn) ... nhưng nó cũng kêu gọi

Processing by MyController#index as HTML //I DO NOT WANT THIS TO HAPPEN 

Dưới đây là các chức năng Tôi hiện đang nhận được

1.) dùng điều hướng tới mydomain năm

2.) "chế biến bởi # index MyController dưới dạng HTML" được đưa ra và yêu cầu máy chủ được thực hiện (ĐÂY lÀ OK)

3.) tài nhấp vào một liên kết và bây giờ là url đọc mydomain.com/# page1 và tôi cập nhật giao diện với JS (NÀY LÀ OK)

4.) tài nhấp vào một liên kết và bây giờ là url đọc mydomain.com/#page2 và tôi cập nhật quan điểm với JS (ĐÂY LÀ OK)

5.) Người dùng nhấp TRỞ LẠI và bây giờ là url đọc mydomain .com/# page1 và tôi cập nhật giao diện với JS (NÀY LÀ OK)

6.) Yêu cầu máy chủ được tự động thực hiện để tải lại trang ("Xử lý bởi MyController # index as HTML" được gọi lại) (NÀY IS NOT OK)

Làm thế nào để ngăn chặn bước 6 xảy ra khi người dùng nhấp vào nút quay lại ?? ... Tôi chỉ wa nt url thay đổi và cho tôi cập nhật giao diện người dùng của tôi qua JS và không yêu cầu máy chủ

Ngoài ra, tôi đang sử dụng ruby ​​trên đường ray nếu điều này giúp ích.

+0

Không chắc chắn điều này là có thể. Được thăng hạng. – VSO

+2

Bạn có thể thử sử dụng API lịch sử HTML5 http://diveinto.html5doctor.com/history.html – jcubic

+0

Bạn không nói rõ ràng cách bạn đến bước 6. Bạn có nói rằng một lần ở bước 5, trang của bạn sẽ tự động chuyển sang bước 6? – ghybs

Trả lời

1

Điều bạn đang cố gắng làm là không thể. Bạn không thể ghi đè hành vi mặc định của các nút trình duyệt như quay lại/chuyển tiếp/dừng/làm mới, v.v.

Những gì bạn có thể làm là tạo các nút Quay lại và Chuyển tiếp của chính bạn (và tự đặt chúng trên trang thực) - và mã xử lý sự kiện của họ cho phù hợp để thực hiện cuộc gọi AJAX của bạn.

+0

tất cả những gì tôi đang cố gắng ngăn chặn bước 6 xảy ra tự động ... Đây có thực sự không khả thi? –

+0

@YaseenAniss theo hiểu biết tốt nhất của tôi, vâng. Tôi sẽ kiểm tra lại về chủ đề này, mặc dù, trong trường hợp tôi sai. –

0

Cuối cùng đã nhận nó figured it out. Vì một lý do nào đó, Turbolinks đã khiến nó tải lại trang bất cứ khi nào nút quay lại hoặc tiến lên được nhấp vào. Tôi đã loại bỏ đá quý Turbolinks khỏi ứng dụng và bây giờ tất cả đều hoạt động hoàn hảo.

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