7.1 Geolocation API
Web APIs (Web Application Programming Interfaces) cung cấp khả năng tương tác mạnh mẽ cho các ứng dụng web với chức năng của trình duyệt và thiết bị của người dùng. Hãy cùng xem xét một số API này, bao gồm Geolocation và Notifications, cùng cách sử dụng chúng.
Geolocation API cho phép ứng dụng web nhận thông tin vị trí địa lý của thiết bị người dùng. Điều này có thể hữu ích cho các ứng dụng như bản đồ, điều hướng và định vị địa lý.
Yêu cầu quyền truy cập vị trí
Để sử dụng Geolocation API, ứng dụng web phải yêu cầu người dùng cho phép truy cập vị trí của họ. Điều này được thực hiện thông qua phương thức navigator.geolocation.getCurrentPosition().
Ví dụ sử dụng Geolocation API:
if ('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition(
(position) => {
const { latitude, longitude } = position.coords;
console.log(`Latitude: ${latitude}, Longitude: ${longitude}`);
},
(error) => {
console.error('Lỗi khi lấy thông tin địa lý:', error);
},
{
enableHighAccuracy: true, // Độ chính xác cao
timeout: 5000, // Thời gian chờ phản hồi (ms)
maximumAge: 0 // Thời gian tối đa có thể sử dụng dữ liệu được lưu trong bộ nhớ đệm (ms)
}
);
} else {
console.log('Geolocation không được hỗ trợ bởi trình duyệt này.');
}
Theo dõi vị trí
Phương thức navigator.geolocation.watchPosition() cho phép theo dõi sự thay đổi vị trí của người dùng.
Ví dụ theo dõi vị trí:
let watchId;
if ('geolocation' in navigator) {
watchId = navigator.geolocation.watchPosition(
(position) => {
const { latitude, longitude } = position.coords;
console.log(`Latitude: ${latitude}, Longitude: ${longitude}`);
},
(error) => {
console.error('Lỗi khi lấy thông tin địa lý:', error);
},
{
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
}
);
}
// Dừng theo dõi vị trí
function stopTracking() {
if (watchId) {
navigator.geolocation.clearWatch(watchId);
}
}
7.2 Notifications API
Notifications API cho phép ứng dụng web hiển thị thông báo trên hệ thống của người dùng. Điều này hữu ích để thu hút sự chú ý của người dùng tới các sự kiện quan trọng, ngay cả khi tab trình duyệt không hoạt động.
Yêu cầu quyền gửi thông báo
Để sử dụng Notifications API, ứng dụng web phải yêu cầu người dùng cho phép gửi thông báo.
Ví dụ yêu cầu quyền:
if ('Notification' in window) {
Notification.requestPermission().then((permission) => {
if (permission === 'granted') {
console.log('Quyền thông báo đã được cấp.');
} else {
console.log('Quyền thông báo đã bị từ chối.');
}
});
} else {
console.log('Thông báo không được hỗ trợ bởi trình duyệt này.');
}
Gửi thông báo
Sau khi có quyền, có thể gửi thông báo bằng cách sử dụng cấu trúc Notification
Ví dụ gửi thông báo:
if (Notification.permission === 'granted') {
const options = {
body: 'Đây là nội dung thông báo',
icon: 'icon.png',
data: { url: 'https://example.com' }
};
const notification = new Notification('Xin chào, thế giới!', options);
// Xử lý sự kiện khi nhấp vào thông báo
notification.onclick = (event) => {
event.preventDefault(); // Ngăn chặn chuyển hướng mặc định
window.open(notification.data.url, '_blank');
};
}
7.3 Các Web API hữu ích khác
1. DeviceOrientation API
DeviceOrientation API cho phép nhận dữ liệu về vị trí của thiết bị trong không gian.
Ví dụ sử dụng DeviceOrientation API:
window.addEventListener('deviceorientation', (event) => {
console.log(`Alpha: ${event.alpha}, Beta: ${event.beta}, Gamma: ${event.gamma}`);
});
2. Battery Status API
Battery Status API cung cấp thông tin về trạng thái pin của thiết bị.
Ví dụ sử dụng Battery Status API:
navigator.getBattery().then((battery) => {
console.log(`Mức pin: ${battery.level * 100}%`);
console.log(`Đang sạc pin: ${battery.charging}`);
battery.addEventListener('levelchange', () => {
console.log(`Mức pin thay đổi: ${battery.level * 100}%`);
});
battery.addEventListener('chargingchange', () => {
console.log(`Trạng thái sạc pin thay đổi: ${battery.charging}`);
});
});
3. Fullscreen API
Fullscreen API cho phép chuyển đổi trang web sang chế độ toàn màn hình.
Ví dụ sử dụng Fullscreen API:
const element = document.documentElement; // Toàn bộ tài liệu
function toggleFullScreen() {
if (!document.fullscreenElement) {
element.requestFullscreen().catch((err) => {
console.error(`Lỗi khi cố gắng bật chế độ toàn màn hình: ${err.message}`);
});
} else {
document.exitFullscreen();
}
}
document.getElementById('fullscreenButton').addEventListener('click', toggleFullScreen);
GO TO FULL VERSION