NavigateEvent
Baseline
2026
*
Newly available
Since January 2026, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
* Some parts of this feature may have varying levels of support.
Giao diện NavigateEvent của Navigation API là đối tượng sự kiện cho sự kiện navigate, được kích hoạt khi bất kỳ loại điều hướng nào được khởi tạo (bao gồm cả việc dùng các tính năng của History API như History.go()). NavigateEvent cung cấp quyền truy cập vào thông tin về điều hướng đó, đồng thời cho phép nhà phát triển chặn và kiểm soát cách xử lý điều hướng.
Constructor
-
Tạo một thực thể
NavigateEventmới.
Thuộc tính thể hiện
Kế thừa các thuộc tính từ giao diện cha, Event.
canInterceptRead only-
Trả về
truenếu điều hướng có thể bị chặn, ngược lại trả vềfalse(ví dụ: bạn không thể chặn một điều hướng xuyên nguồn gốc). destinationRead only-
Trả về một đối tượng
NavigationDestinationđại diện cho đích đến mà điều hướng đang hướng tới. downloadRequestRead only-
Trả về tên tệp được yêu cầu tải xuống, trong trường hợp là điều hướng tải xuống (ví dụ: một phần tử
<a>hoặc<area>có thuộc tínhdownload), hoặcnulltrong các trường hợp khác. formDataRead only-
Trả về đối tượng
FormDatađại diện cho dữ liệu đã gửi trong trường hợp gửi biểu mẫuPOST, hoặcnulltrong các trường hợp khác. hashChangeRead only-
Trả về
truenếu điều hướng là một điều hướng fragment, tức là tới một định danh fragment trong cùng tài liệu, ngược lại trả vềfalse. hasUAVisualTransitionRead only-
Trả về
truenếu tác nhân người dùng đã thực hiện một chuyển tiếp trực quan cho điều hướng này trước khi phát sự kiện, ngược lại trả vềfalse. infoRead only-
Trả về giá trị dữ liệu
infođược truyền bởi thao tác điều hướng khởi tạo (ví dụ:Navigation.back()hoặcNavigation.navigate()), hoặcundefinednếu không có dữ liệuinfonào được truyền. -
Trả về kiểu điều hướng:
push,reload,replace, hoặctraverse. signalRead only-
Trả về một
AbortSignal, sẽ bị hủy nếu điều hướng bị hủy (ví dụ: khi người dùng nhấn nút "Stop" của trình duyệt, hoặc khi một điều hướng khác bắt đầu và hủy điều hướng hiện tại). sourceElementRead only-
Khi điều hướng được khởi tạo bởi một phần tử (ví dụ khi nhấp vào một liên kết), trả về đối tượng
Elementđại diện cho phần tử khởi tạo. userInitiatedRead only-
Trả về
truenếu điều hướng được khởi tạo bởi người dùng (ví dụ: nhấp vào liên kết, gửi biểu mẫu, hoặc nhấn các nút "Back"/"Forward" của trình duyệt), ngược lại trả vềfalse.
Phương thức thể hiện
Kế thừa các phương thức từ giao diện cha, Event.
intercept()-
Chặn điều hướng này, biến nó thành điều hướng cùng tài liệu đến URL
destination. Nó có thể nhận các hàm xử lý định nghĩa hành vi xử lý điều hướng, cùng với các tùy chọnfocusResetvàscrollđể bật hoặc tắt hành vi mặc định của trình duyệt về tiêu điểm và cuộn theo ý muốn. scroll()-
Có thể được gọi để kích hoạt thủ công hành vi cuộn do trình duyệt điều khiển xảy ra để phản hồi điều hướng, nếu bạn muốn việc đó diễn ra trước khi quá trình xử lý điều hướng hoàn tất.
Ví dụ
>Xử lý điều hướng bằng intercept()
navigation.addEventListener("navigate", (event) => {
// Thoát sớm nếu điều hướng này không nên bị chặn,
// ví dụ: nếu điều hướng là xuyên nguồn gốc hoặc là yêu cầu tải xuống
if (shouldNotIntercept(event)) return;
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
// URL đã thay đổi, nên hiển thị placeholder trong khi
// tìm nạp nội dung mới, chẳng hạn như spinner hoặc trang đang tải
renderArticlePagePlaceholder();
// Tìm nạp nội dung mới và hiển thị khi sẵn sàng
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
},
});
}
});
Note:
Trước khi Navigation API khả dụng, để làm điều tương tự, bạn phải lắng nghe tất cả sự kiện nhấp chuột trên liên kết, chạy e.preventDefault(), thực hiện lời gọi History.pushState() phù hợp, rồi thiết lập chế độ xem trang dựa trên URL mới. Và cách đó cũng không xử lý được tất cả các điều hướng, mà chỉ các lượt nhấp liên kết do người dùng khởi tạo.
Xử lý cuộn bằng scroll()
Trong ví dụ này về việc chặn điều hướng, hàm handler() bắt đầu bằng cách tìm nạp và hiển thị một số nội dung bài viết, rồi sau đó mới tìm nạp và hiển thị thêm nội dung phụ. Sẽ hợp lý hơn nếu cuộn trang đến phần nội dung chính ngay khi nó có sẵn để người dùng có thể tương tác, thay vì đợi đến khi nội dung phụ cũng được hiển thị xong. Để làm vậy, chúng ta thêm lời gọi scroll() ở giữa.
navigation.addEventListener("navigate", (event) => {
if (shouldNotIntercept(event)) return;
const url = new URL(event.destination.url);
if (url.pathname.startsWith("/articles/")) {
event.intercept({
async handler() {
const articleContent = await getArticleContent(url.pathname);
renderArticlePage(articleContent);
event.scroll();
const secondaryContent = await getSecondaryContent(url.pathname);
addSecondaryContent(secondaryContent);
},
});
}
});
Thông số kỹ thuật
| Specification |
|---|
| HTML> # the-navigateevent-interface> |