Sự khác biệt giữa window.location.href, window.location.replace và window.location.assign


129

Sự khác biệt giữa

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

Tôi đọc trong nhiều diễn đàn rằng window.location.assign()chỉ thay thế lịch sử phiên hiện tại và do đó nút quay lại của trình duyệt sẽ không hoạt động. Tuy nhiên, tôi không thể tái tạo điều này.

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

1
Bạn có thể thấy một bài đăng cũ trong url: stackoverflow.com/questions/1865837/... hy vọng nó sẽ rất hữu ích

Dưới đây là một lời giải thích tốt hơn: stackoverflow.com/a/847130/96656
Mathias Bynens

Câu trả lời:


165

Chúng làm điều tương tự:

window.location.assign(url);
window.location = url;
window.location.href = url;

Họ chỉ cần điều hướng đến URL mới. Mặt khác, replacephương pháp này điều hướng đến URL mà không thêm bản ghi mới vào lịch sử.

Vì vậy, những gì bạn đã đọc trong nhiều hình thức đó là không đúng. Các assignphương pháp thực hiện thêm một kỷ lục mới về lịch sử.

Tham khảo: http://developer.mozilla.org/en/window.location


1
Cảm ơn rất nhiều cho câu trả lời. Nó đã giúp tôi rất nhiều để giải quyết vấn đề nút quay lại của trình duyệt.
santosh kumar patro

@blunderboy: Dù sao thì đó cũng là câu trả lời hàng đầu, nên điều đó sẽ không thay đổi được điều gì.
BoltClock

Vậy mục đích của nó là assign()gì? Từ câu trả lời này và các tài liệu, nó có vẻ giống hệt nhau location = ....
Mitya

11

Phần về việc không thể sử dụng nút Quay lại là một cách hiểu sai phổ biến. window.location.replace (URL) ném ra MỘT mục trên cùng khỏi danh sách lịch sử trang, bằng cách ghi đè nó bằng mục nhập mới, vì vậy người dùng không thể dễ dàng quay lại MỘT trang web cụ thể đó. Chức năng KHÔNG xóa toàn bộ danh sách lịch sử trang, cũng như không làm cho nút Quay lại hoàn toàn không hoạt động.

(KHÔNG chức năng cũng như sự kết hợp của các tham số mà tôi biết có thể thay đổi hoặc ghi đè các mục nhập trong danh sách lịch sử mà bạn hoàn toàn không sở hữu cho một số mục nhất định - các trình duyệt thường thúc đẩy giới hạn bảo mật này bằng cách thậm chí không xác định bất kỳ hoạt động nào có thể ảnh hưởng đến bất kỳ mục nhập nào ngoài các top ai trong danh sách lịch sử trang. tôi rùng mình khi nghĩ đến chuyện sắp xếp thứ đê tiện malware có thể làm gì nếu một chức năng như vậy tồn tại.)

Nếu bạn thực sự muốn làm cho nút Quay lại không hoạt động (có thể không phải là "thân thiện với người dùng": hãy nghĩ lại nếu đó thực sự là điều bạn muốn làm), hãy "mở" một cửa sổ hoàn toàn mới. (Bạn có thể "mở" một cửa sổ bật lên thậm chí không nút "Quay lại" ... nhưng những cửa sổ bật lên ngày nay không phổ biến lắm :-) Nếu bạn muốn giữ cho trang của mình hiển thị bất kể người dùng làm gì ( một lần nữa, "tính thân thiện với người dùng" là một vấn đề), hãy thiết lập một trình xử lý window.onunload mà chỉ cần tải lại trang của bạn lại rõ ràng ngay từ đầu.


4
'NO chức năng cũng không kết hợp các thông số mà tôi biết sự thay đổi lon hoặc bút toán ghi danh sách lịch sử ghi đè' ... Chào mừng bạn đến HTML5
SpYk3HH

6
Không thể thay đổi hoặc ghi đè các mục lịch sử trình duyệt mà bạn không sở hữu là một quy tắc bảo mật đã có từ lâu . HTML5 chỉ đơn giản là tiếp tục quy tắc đó.
Chuck Kollars

Bạn đã bỏ lỡ quan điểm hoặc mỉa mai hơn. Tra cứu html5 và lịch sử
SpYk3HH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.