2009-05-14 15 views
9

Trong thử nghiệm document.location.href, tôi đã quan sát thấy rằng khi người dùng khởi tạo một hành động dẫn đến javascript gán cho document.location.href, URL mới sẽ được thêm vào lịch sử.Chỉ định cho document.location.href không có lịch sử clobbering

Tuy nhiên, nếu cuộc gọi được bắt đầu bởi javascript là kết quả của, nói, thay đổi trạng thái của XMLHTTPRequest, mục nhập cho trang hiện tại trong lịch sử bị ghi đè. Tôi đã mô tả chính xác điều này chưa? Có cách nào để thay đổi trang được phản ánh trong lịch sử trong trường hợp sau không?

+0

Tôi không chắc chắn bạn muốn làm gì. Bạn có muốn xóa các mục nhấp chuột khỏi lịch sử hay bạn muốn đẩy các thay đổi địa chỉ không nhấp vào lịch sử? –

+0

Thứ hai - Tôi muốn máy chủ của tôi có thể thông báo cho khách hàng điều hướng đến một trang mới - bảo toàn lịch sử - là kết quả của phản hồi cho một thử nghiệm XMLHttpRequest – wolffiex

Trả lời

11

tôi đã phải đối mặt với cùng một vấn đề và tìm thấy cách giải quyết này mà làm việc cho tôi

thay vì

function onAjaxCallback(evt){ 
    location.href=newLocation; 
} 

i bọc cuộc gọi location.href xung quanh một setTimeout. Dường như làm trò lừa. Lịch sử của tôi đang hoạt động tốt ngay bây giờ. Hy vọng rằng sẽ giúp

function onAjaxCallback(evt){ 
    setTimeout(function(){ 
     location.href=newLocation; 
    },0) 
} 
+3

btw trên chrome, ff3.5 và ie8 – royston

+0

+1 điều này giải quyết được vấn đề của tôi tại http://stackoverflow.com/questions/1629285/how-to-use-jquery-click-event-to-change-href-value-asyncronously-based-on-a-json – pavsaund

-1

Than ôi, câu hỏi của bạn không thể trả lời, yêu cầu AJAX không có gì để làm với lịch sử trình duyệt, và nếu bạn nạp một số nội dung động với họ, sau đó người dùng nhấp nút back của trình duyệt, trang trước được tải (điều này đã được tải bằng yêu cầu GET hoặc POST thông thường), làm hỏng chuỗi bạn hiển thị nội dung.

Câu trả lời của Dmitri có nghĩa là bạn sẽ duy trì lịch sử của riêng mình cho nội dung động bằng cách sử dụng một phần của url (sau biểu tượng #), có thể bạn sẽ cung cấp lại cho bạn các nút rward, nhưng bạn vẫn không được bảo vệ khỏi ảnh hưởng của nút quay lại và tiến trình của trình duyệt.

Nếu chỉ họ đã cung cấp một số loại sự kiện để xử lý các nhấp chuột của người dùng trên các nút này với khả năng hủy.

1

Đọc câu hỏi gốc cẩn thận hơn. Câu hỏi không phải về nội dung được tải bởi XHR, nhưng về nội dung được tải bởi một tập lệnh được tải bởi một XHR. Tôi đã có cùng một vấn đề và phương pháp setTimeout dường như hoạt động tốt.

2

nghiên cứu: window.location.replace()window.location.assign()

0

URL có thể được tự thêm vào lịch sử trước khi chuyển hướng người dùng.

if (window.history) { 
    history.pushState({}, window.location.href); 
} 
window.location.replace("/login/?next=" + window.location.pathname); 
Các vấn đề liên quan