2014-09-03 15 views
7

Tôi đang làm việc với API lịch sử và sử dụng trạng thái push và pop. Tôi muốn ngăn chặn sự kiện popstate bắn trong một số kịch bản mà tôi chỉ thêm băm vào URL. ví dụ trong một số trường hợp khi nhấp vào neo, nó gắn thêm # vào URL và popstate ngay lập tức bị sa thải). Tôi muốn tránh tất cả các trường hợp trong đó # hoặc #somehasvalue được nối vào URL và dừng popstate. Tôi đang làm chủ URL của các tham số truy vấn và tôi không có bất kỳ kịch bản nào mà tôi cần sự kiện popstate để kích hoạt với # trong URL.ngừng kích hoạt popstate trên hashchange

Đây là mã của tôi.

if (supportsHistoryApi()) { 

    window.onpopstate = function (event) { 
    var d = event.state || {state_param1: param1, state_param2: param2};      
    var pathName = window.location.pathname, 
     params = window.location.search; 

    loadData(event, pathName + params, d.state_param1, d.state_param2); 

} 

Trả lời

6

Theo như tôi thấy, bạn không thể ngăn không cho cửa sổ bật lên không may.

Việc bạn có thể làm là kiểm tra đối tượng event.state. Đó sẽ là null trên một thay đổi băm. Vì vậy, tôi khuyên bạn nên thêm

if(event.state === null) { 
    event.preventDefault(); 
    return false; 
} 

Cho trình xử lý sự kiện popstate của bạn ngay từ đầu. Tôi nghĩ rằng đó là cách tốt nhất để ngăn chặn sự bùng nổ của mã xử lý popstate trên mặt của bạn khi thay đổi băm, nhưng tôi muốn được quan tâm để biết nếu có các giải pháp khác.

+0

Điều này không hoạt động khi bạn quay lại trang đầu tiên bạn mở. Bởi vì sau đó 'state' cũng là' null', nhưng vẫn không có hashchange –

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