Tôi nên sử dụng window.navigate hoặc document.location trong JavaScript?


177

Phương pháp ưa thích để sử dụng để thay đổi vị trí của trang web hiện tại bằng JavaScript là gì? Tôi đã thấy cả window.navigate và document.location được sử dụng. Có sự khác biệt nào trong hành vi không? Có sự khác biệt trong việc thực hiện trình duyệt?

Câu trả lời:


220
window.location.href = 'URL';

là triển khai tiêu chuẩn để thay đổi vị trí của cửa sổ hiện tại.


22
Bạn có tham chiếu để chỉ ra rằng window.location.href là triển khai tiêu chuẩn không? Và tiêu chuẩn đó có áp dụng tốt như nhau cho tất cả các trình duyệt không? Bạn chắc chắn có vẻ am hiểu và hơn 15 phiếu (cộng với câu trả lời được chấp nhận) giúp làm cho nó có thẩm quyền hơn, mặc dù tôi nghĩ sẽ tốt hơn nếu xem tài liệu từ các nhóm phát triển trình duyệt để sao lưu khiếu nại.
Goyuix

6
@Goyuix, có lẽ chính xác hơn để nói rằng đó window.location.hreflà việc thực hiện hoàn chỉnh, nhưng window.locationhoàn thành điều tương tự. Xem docs.sun.com/source/816-6408-10/location.htm : "Nếu bạn gán một chuỗi cho thuộc locationtính của một đối tượng, JavaScript sẽ tạo một locationđối tượng và gán chuỗi đó cho thuộc tính của nó href."
James Skidmore

3
Có vẻ như những người này đã quyết định đó là sở thích cá nhân: developer.mozilla.org/Talk:en/DOM/window.location . Hoặc xem ví dụ gần phía dưới, họ chỉ sử dụng window.locationnhưng điều đó không nhất thiết chỉ ra một trong hai cách: developer.mozilla.org/en/window.location .
James Skidmore

1
Tôi hiện đang sử dụng điều này để phát triển Android. Tôi gặp sự cố khi chuyển hướng trang từ JS trong trình duyệt mặc định của Android. Tôi đã thử window.location.href = 'URL';và cũng window.location.assign('URL');là phương pháp được thiết kế để tải lại một trang mới. Thông tin chi tiết có thể được tìm thấy w3schools.com/jsref/obj_location.asp
philipp

3
window.navigatelà một phương thức độc quyền, được Internet Explorer sử dụng (Tôi lưu ý chắc chắn liệu các trình duyệt khác có bắt chước nó để tương thích hay không, Chrome không). document.locationhoặc window.locationlà các đối tượng tiêu chuẩn (xem các thông số kỹ thuật HTML / HTML5 / DOM khác nhau). document.location = someURL(hoặc window.location = someURL) có thể được hỗ trợ do mã kế thừa. Cách đúng để làm điều đó là document.location.href = someURL, hoặc có lẽ document.location.assign(someURL).
PhistucK

11

window.navigate không được hỗ trợ trong một số trình duyệt

Trong tập lệnh java có nhiều cách để chuyển hướng, hãy xem đoạn mã và giải thích bên dưới

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href tải trang từ bộ đệm của trình duyệt và không phải lúc nào cũng gửi yêu cầu đến máy chủ. Vì vậy, nếu bạn có sẵn phiên bản cũ của trang trong bộ đệm thì nó sẽ chuyển hướng đến đó thay vì tải một trang mới từ máy chủ.

Phương thức window.location.assign () để chuyển hướng nếu bạn muốn cho phép người dùng sử dụng nút quay lại để quay lại tài liệu gốc.

Phương thức window.location.replace () nếu bạn muốn chuyển hướng đến một trang mới và không cho phép người dùng điều hướng đến trang gốc bằng nút quay lại.


7

document.locatio n là một thuộc tính chuỗi chỉ đọc (không dùng nữa nhưng vẫn hiện diện), được thay thế bằng document.url .


6

window.location cũng ảnh hưởng đến khung hình,

hình thức tốt nhất tôi tìm thấy là:

parent.window.location.href

Và điều tồi tệ hơn là:

parent.document.URL 

Tôi đã thực hiện một bài kiểm tra trình duyệt lớn và một số IE hiếm với một số plugin không được xác định với dạng thứ hai.


Theo logic đó, liệu top.window.location.href vẫn tốt hơn chứ?
Orwellophile

6

window.locationsẽ ảnh hưởng đến mục tiêu trình duyệt của bạn. document.location sẽ chỉ ảnh hưởng đến trình duyệt và frame / iframe của bạn.


4

window.navigateKHÔNG được hỗ trợ trong một số trình duyệt, do đó nên tránh một trình duyệt. Bất kỳ phương pháp nào khác sử dụng thuộc tính vị trí là cách tiếp cận nhất quán và đáng tin cậy nhất


2

Tôi sẽ đi với window.location = "http://...";. Tôi đã mã hóa JavaScript trình duyệt chéo trong một vài năm và tôi chưa bao giờ gặp vấn đề khi sử dụng phương pháp này.

window.navigatewindow.location.hrefcó vẻ hơi kỳ lạ với tôi.


13
window.location hoạt động, nhưng về mặt kỹ thuật không chính xác vì "location" là một đối tượng.
James Skidmore

16
Nhưng mọi thứ trong JavaScript là một đối tượng :)
cllpse

1
Mặc dù hầu hết mọi thứ đều là một đối tượng trong JavaScript, việc gán một chuỗi cho một đối tượng thường không đặt giá trị thành một trong các thuộc tính của nó (như window.location hoặc document.location làm với thuộc tính href của chúng), nhưng thay vào đó thay thế đối tượng đó bằng một thuộc tính chuỗi. Trong trường hợp này, một cách giải quyết trình duyệt đã được thêm vào để tương thích với các triển khai (kỳ quặc) hiện có (và không quá kế thừa).
PhistucK 16/03 '

1

Thực sự không có sự khác biệt; Có khoảng 5 phương pháp khác nhau để làm điều đó. Tuy nhiên, những cái tôi thấy thường xuyên nhất là document.locationwindow.locationbởi vì chúng được hỗ trợ bởi tất cả các trình duyệt chính. (Cá nhân tôi chưa bao giờ thấy window.navigateđược sử dụng trong mã sản xuất, vì vậy có lẽ nó không có hỗ trợ rất tốt?)


document.location không hoạt động trong tất cả các trình duyệt. window.location nào.
Philippe Leybaert

2
Firefox không hỗ trợ window.navigate
Andrew Harry


-5

Bạn có thể di chuyển trang của mình bằng cách sử dụng

window.location.href =Url;

3
Điều này không thực sự bổ sung thêm thông tin sau đó là câu trả lời được chấp nhận và nhân lên ...
Stuart Siegler

3
Bạn thậm chí có thể đi xa hơn và lập luận rằng bạn chỉ đơn giản là đạo văn câu trả lời được chấp nhận
Liam
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.