import { useState, useEffect } from "react";
interface GeolocationData {
latitude: number | null;
longitude: number | null;
osName: string;
osVersion: string;
error?: string;
}
const useGeolocationAndOS = (): GeolocationData => {
const [location, setLocation] = useState({
latitude: null,
longitude: null,
osName: "Unknown",
osVersion: "Unknown",
});
useEffect(() => {
// Get OS details
const userAgent = navigator.userAgent;
let osName = "Unknown";
let osVersion = "Unknown";
if (/Windows NT 10/.test(userAgent)) {
osName = "Windows";
osVersion = "10";
} else if (/Windows NT 6\.3/.test(userAgent)) {
osName = "Windows";
osVersion = "8.1";
} else if (/Windows NT 6\.2/.test(userAgent)) {
osName = "Windows";
osVersion = "8";
} else if (/Windows NT 6\.1/.test(userAgent)) {
osName = "Windows";
osVersion = "7";
} else if (/Mac OS X (\d+[_.]\d+)/.test(userAgent)) {
osName = "Mac OS";
osVersion = RegExp.$1.replace("_", ".");
} else if (/Android (\d+\.\d+)/.test(userAgent)) {
osName = "Android";
osVersion = RegExp.$1;
} else if (/iPhone OS (\d+_\d+)/.test(userAgent)) {
osName = "iOS";
osVersion = RegExp.$1.replace("_", ".");
}
setLocation((prev) => ({ ...prev, osName, osVersion }));
// Get Geolocation
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
(position) => {
setLocation((prev) => ({
...prev,
latitude: position.coords.latitude,
longitude: position.coords.longitude,
}));
},
(error) => {
setLocation((prev) => ({ ...prev, error: error.message }));
}
);
} else {
setLocation((prev) => ({ ...prev, error: "Geolocation is not supported" }));
}
}, []);
return location;
};
export default useGeolocationAndOS;
Подробнее здесь: https://stackoverflow.com/questions/794 ... -using-typ
Пользовательский крючок для получения широты и долготы и имени и версии ОС с использованием TypeScript [закрыто] ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Преобразование широты и долготы в utm на экваторе (широты имеют смешанные знаки)
Anonymous » » в форуме Python - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-