Làm cách nào để lấy URL trước đó trong JavaScript?


230

Có cách nào để lấy URL trước đó trong JavaScript không? Một cái gì đó như thế này:

alert("previous url is: " + window.history.previous.href);

Có một cái gì đó như thế? Hay tôi chỉ nên lưu trữ nó trong một cookie? Tôi chỉ cần biết để tôi có thể thực hiện chuyển đổi từ URL trước đó sang URL hiện tại mà không cần neo và tất cả điều đó.

Câu trả lời:


351
document.referrer

trong nhiều trường hợp, bạn sẽ nhận được URL của trang cuối cùng mà người dùng đã truy cập, nếu họ truy cập trang hiện tại bằng cách nhấp vào liên kết (so với nhập trực tiếp vào thanh địa chỉ hoặc tôi tin trong một số trường hợp, bằng cách gửi biểu mẫu?). Được chỉ định bởi DOM Cấp 2 . Thêm ở đây.

window.historycho phép điều hướng, nhưng không truy cập vào URL trong phiên vì lý do bảo mật và quyền riêng tư. Nếu lịch sử URL chi tiết hơn có sẵn, thì mọi trang web bạn truy cập đều có thể thấy tất cả các trang web khác bạn đã đến.

Nếu bạn đang xử lý trạng thái di chuyển xung quanh trang web của chính mình, thì việc sử dụng một trong các kỹ thuật quản lý phiên thông thường: dữ liệu cookie, thông số URL hoặc thông tin phiên phía máy chủ có thể ít dễ dàng hơn và chắc chắn sẽ hữu ích hơn.


4
Ngoài ra còn có document.referrer, nếu bạn đến trang hiện tại thông qua một liên kết (nhưng không, ví dụ, bằng dấu trang hoặc gõ vào thanh địa chỉ).
Hellion

68
Tôi đã kết thúc việc lưu trữ url trước đó trong cookie cho trang web, document.referrerkhông phải lúc nào cũng hoạt động. $.cookie("previousUrl", window.location.href, {path:"/"});.
Lance Pollard

4
Thưa ngài, đã cứu tôi khỏi một thế giới đau khổ về JavaScript!
Anna Lam

8
trước đây không được giới thiệu. đừng nhầm lẫn chúng
Green

1
document.referrer không lưu băm từ url cuối cùng ... nó chỉ đề cập đến url cuối cùng.
Nmaster88

29

Nếu bạn muốn truy cập trang trước mà không biết url, bạn có thể sử dụng api Lịch sử mới.

history.back(); //Go to the previous page
history.forward(); //Go to the next page in the stack
history.go(index); //Where index could be 1, -1, 56, etc.

Nhưng bạn không thể thao túng nội dung của ngăn xếp lịch sử trên trình duyệt không hỗ trợ API Lịch sử HTML5

Để biết thêm thông tin, xem tài liệu


2
Làm thế nào để làm điều đó với việc biết url, href = ''?
summu

@summu nó được lưu trong trình duyệt
Ahmed Taha

20

document.referrer không giống với URL thực tế trong mọi tình huống.

Tôi có một ứng dụng mà tôi cần thiết lập một bộ khung với 2 khung. Một khung được biết, khung kia là trang tôi đang liên kết. Có vẻ như đó document.referrerlà lý tưởng vì bạn sẽ không phải chuyển tên tệp thực tế cho tài liệu frameset.

Tuy nhiên, nếu sau đó bạn thay đổi trang khung dưới cùng và sau đó sử dụng history.back()thì nó không tải trang gốc vào khung dưới cùng, thay vào đó, nó tải lại document.referrervà kết quả là bộ khung sẽ biến mất và bạn quay lại cửa sổ bắt đầu ban đầu.

Mất một lúc để hiểu điều này. Vì vậy, trong mảng lịch sử, document.referrerkhông chỉ là một URL, nó rõ ràng là đặc tả cửa sổ tham chiếu. Ít nhất, đó là cách tốt nhất tôi có thể hiểu nó vào lúc này.


Theo thử nghiệm mới nhất của tôi 'document.referrer' bây giờ chỉ cần trả lại tên miền và không phải URL đầy đủ để tránh theo dõi.
Akash Kumar Seth

12

Nếu bạn đang viết một ứng dụng web hoặc ứng dụng trang đơn (SPA) trong đó việc định tuyến diễn ra trong ứng dụng / trình duyệt chứ không phải là một chuyến đi khứ hồi đến máy chủ, bạn có thể làm như sau:

window.history.pushState({ prevUrl: window.location.href }, null, "/new/path/in/your/app")

Sau đó, trong tuyến đường mới của bạn, bạn có thể thực hiện các thao tác sau để truy xuất URL trước đó:

window.history.state.prevUrl // your previous url

0

Những người bạn sử dụng Node.js và Express có thể đặt cookie phiên sẽ ghi nhớ URL trang hiện tại, do đó cho phép bạn kiểm tra người giới thiệu khi tải trang tiếp theo. Đây là một ví dụ sử dụng express-sessionphần mềm trung gian:

//Add me after the express-session middleware    
app.use((req, res, next) => {
    req.session.referrer = req.protocol + '://' + req.get('host') + req.originalUrl;
    next();
});

Sau đó, bạn có thể kiểm tra sự tồn tại của cookie giới thiệu như vậy:

if ( req.session.referrer ) console.log(req.session.referrer);

Đừng cho rằng cookie giới thiệu luôn tồn tại với phương thức này vì nó sẽ không khả dụng trong các trường hợp URL trước đó là một trang web khác, phiên đã được làm sạch hoặc chỉ được tạo (tải trang web lần đầu).


0
<script type="text/javascript">
    document.write(document.referrer);
</script>

document.referrer phục vụ mục đích của bạn, nhưng nó không hoạt động cho các phiên bản Internet Explorer sớm hơn IE9.

Nó sẽ hoạt động cho các trình duyệt phổ biến khác, như Chrome, Mozilla, Opera, Safari, v.v.


Hoạt động trong IE 9 cho tôi
frodo2975

-8

Điều này sẽ điều hướng đến URL đã truy cập trước đó.

javascript:history.go(-1)

1
OP đã hỏi làm thế nào để có được, chứ không phải cách đi, đến URL trước đó
Matt Jensen
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.