Vì vậy, bây giờ khi HTML5 giới thiệu history.pushState
để thay đổi lịch sử trình duyệt, các trang web bắt đầu sử dụng kết hợp với Ajax thay vì thay đổi định danh phân đoạn của URL.
Đáng buồn thay, điều đó có nghĩa là những cuộc gọi đó không thể được phát hiện nữa onhashchange
.
Câu hỏi của tôi là: Có cách nào đáng tin cậy (hack ?;)) Để phát hiện khi một trang web sử dụng history.pushState
? Thông số kỹ thuật không nêu bất cứ điều gì về các sự kiện được nêu ra (ít nhất là tôi không thể tìm thấy bất cứ điều gì).
Tôi đã cố gắng tạo mặt tiền và thay thế window.history
bằng đối tượng JavaScript của riêng mình, nhưng nó không có tác dụng gì cả.
Giải thích thêm: Tôi đang phát triển một tiện ích bổ sung Firefox cần phát hiện những thay đổi này và hành động tương ứng.
Tôi biết có một câu hỏi tương tự vài ngày trước đã hỏi liệu việc nghe một số sự kiện DOM có hiệu quả không nhưng tôi không muốn dựa vào điều đó bởi vì những sự kiện này có thể được tạo ra vì nhiều lý do khác nhau.
Cập nhật:
Đây là một jsfiddle (sử dụng Firefox 4 hoặc Chrome 8) cho thấy onpopstate
không được kích hoạt khi pushState
được gọi (hoặc tôi đang làm gì đó sai? Hãy thoải mái cải thiện nó!).
Cập nhật 2:
Một vấn đề (phụ) khác window.location
là không được cập nhật khi sử dụng pushState
(nhưng tôi đã đọc về điều này đã có ở đây trên SO tôi nghĩ).
history
đối tượng. Điều đó có thể là không cần thiết trong trường hợp này.