2010-10-02 19 views
66

Tôi có đoạn mã sau đó thay đổi các trang từ bên trong JavaScript:Làm thế nào để thay đổi trang từ bên trong Javascript

var newUrl = [some code to build up URL string]; 
window.location.replace(newUrl); 

Nhưng nó không thay đổi URL trên, vì vậy khi ai đó nhấp vào nút quay lại nó doesn' t quay lại trang trước.

Làm cách nào để JavaScript cũng thay đổi URL trên cùng nên nút quay lại của trình duyệt hoạt động.

Trả lời

7

Hmm, tôi sẽ sử dụng

Tôi không chắc chắn chính xác nếu đó là những gì bạn có ý nghĩa.

28

ấn định đơn giản để window.location hay window.location.href cần sử dụng tốt:

window.location = newUrl; 

Tuy nhiên, URL mới của bạn sẽ làm cho trình duyệt để tải trang mới, nhưng có vẻ như bạn muốn thay đổi địa chỉ URL mà không để lại trang hiện tại. Bạn có hai tùy chọn cho việc này:

  1. Sử dụng hàm băm URL. Ví dụ: bạn có thể đi từ example.com đến example.com#foo mà không cần tải trang mới. Bạn có thể chỉ cần đặt window.location.hash để thực hiện việc này dễ dàng. Sau đó, bạn nên nghe sự kiện HTML5 hashchange, sự kiện sẽ được kích hoạt khi người dùng nhấn nút quay lại. Điều này không được hỗ trợ trong các phiên bản cũ của IE, nhưng hãy kiểm tra jQuery BBQ, điều này làm cho công việc này trong tất cả các trình duyệt.

  2. Bạn có thể sử dụng Lịch sử HTML5 để sửa đổi đường dẫn mà không cần tải lại trang. Điều này sẽ cho phép bạn thay đổi từ example.com/foo thành example.com/bar. Sử dụng này rất dễ dàng:

    window.history.pushState("example.com/foo");

    Khi người dùng nhấn "trở lại", bạn sẽ nhận được sự kiện của cửa sổ popstate, mà bạn có thể dễ dàng nghe (jQuery):

    $(window).bind("popstate", function(e) { alert("location changed"); });

    Rất tiếc, tính năng này chỉ được hỗ trợ trong các trình duyệt rất hiện đại, như Chrome, Safari và Firefox 4 beta.

+0

* phương pháp .replace trên dây sẽ không thay đổi chuỗi nó được áp dụng cho, nó sẽ tạo ra một chuỗi mới. "* - Phương thức' window.location.replace() 'không giống như phương thức' String.prototype.replace() 'vì' window.location' không phải là một chuỗi ('window.location.replace()' thay thế URL hiện tại bằng một đối tượng mới, trong khi đó ghi đè mục nhập của URL cũ trong lịch sử. –

+1

Cảm ơn bạn đã sửa, tôi sẽ cập nhật câu trả lời của mình cho phù hợp. – bcherry

+2

Nhìn lại, đây là câu trả lời hay nhất. document.location.href không có gì trên pushState – buley

5

Nếu bạn chỉ muốn cập nhật đường dẫn tương đối, bạn cũng có thể làm

window.location.pathname = '/relative-link'

"http://domain.com" -> "http://domain.com/relative-link"

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