User Agent Client Hints를 사용하여 브라우저를 판단할 때 고려할 사항
11504 단어 JavaScriptTypeScripttech
개시하다
User Agent Client Hints(이하 UA-CH라고 함)를 사용한 브라우저 판정 처리는 구현할 기회가 있지만 몇 가지 주의할 점이 있어 요약했습니다.
!
환경 등
UA-CH 정보
한마디로 OS와 브라우저 정보를 얻을 수 있는 자바스크립트 API다.
window.navigator.userAgentData를 활용합니다.
const useAgentData = navigator.userAgentData;
console.log(useAgentData)
위의 내용을 복제하고 콘솔을 사용한 경우위에서 설명한 대로 OS 정보
mobile:false
의 느낌으로 정보를 얻을 수 있습니다.주제 밖의 말이지만 비동기적으로 실행하면 더 자세한 정보를 얻을 수 있다.
(async() => {
const useAgentData = navigator.userAgentData;
const highEntropyValues = await useAgentData.getHighEntropyValues([
"platform",
"platformVersion",
"architecture",
"model",
"uaFullVersion"
]);
console.log(useAgentData)
console.log("詳細",highEntropyValues)
})();
userAgent Data는 크롬에서 버전 90부터 사용할 수 있지만 이전에는 일반적으로 User Agent와 브라우저 판정이 있는 프로그램 라이브러리(UAParser 등)를 통해 OS의 종류와 브라우저의 버전 정보 등을 얻었다.그러나 Chrome은 UserAgent에 대한 정보를 점차 줄이기로 결정했습니다.
(이 근처에는 자세히 설명하는 글이 많아 생략함)
주의해야 할 것은 현재 브라우저(주로safari)에 따라 UA-CH를 사용하여 얻을 수 없다는 것이다.
이것은 이 점을 의식하여 실시할 때의 주의점이다.
이루어지다
주의점 1: 유형 정의 파일 만들기
TypeScript 버전 4.5.4에서는 포함된 유형 정의
window.navigator.userAgentData
가 없으므로 폴더 아래에 파일 이름@types
을 만들어 유형 정의를 수행합니다.[1] window.d.ts
type Brand = {
readonly brand: string;
readonly version: string;
};
type NavigatorUAData = {
readonly brands: Brand[];
readonly mobile: boolean;
readonly platform: string;
};
interface Navigator {
userAgentData: NavigatorUAData;
}
window.d.ts
합병interface
의 유형에 따라 Navigator
의 오류를 제거합니다.주의사항 2: 선택된 체인 설치
userAgentData
JavaScript API에 제공되지 않은 브라우저에서 실행하면 오류가 발생하고 의도하지 않은 동작이 될 수 있으므로 자동 체인userAgentData
을 추가하여 반환하십시오. const userAgentData = navigator?.userAgentData;
주의점 3: UA-CH를 통해 UAParser와 함께 사용할 수 없는 브라우저 판정
UA-CH에서 가져올 수 없는 브라우저(주로safari)에 대한 판정에 UAParser.js 등의 프로그램 라이브러리를 사용합니다.
UAParser를 사용했습니다. UserAgent와 다른 프로그램 라이브러리에 문제가 없습니다.
index.ts
(() => {
if (navigator?.userAgentData){
// UA-CHで取得できた際の処理
console.log(navigator.userAgentData)
} else {
// UA-CHで取得できなかった為、UAParser.jsを利用する
const browserInfo = uaParser.getBrowser() || '';
// iPhoneだったら...など細かい処理
}
})();
또 앞으로 사파리가 UA-CH에 대응할 때 취득 시 처리가 불가능할 경우 크롬이나 엣지만 UA-CH를 통과하고, 다른 브라우저는 UAParser를 통해 브라우저 판정 등에 공을 들여야 한다.index.ts
(() => {
const CHROME = 'Google Chrome'; // UA-CHでのChrome
const EDGE = 'Microsoft Edge'; // UA-CHでのedge
const userAgentData = navigator?.userAgentData;
if (userAgentData?.brands.length){
// UA-CHで取得できた際の処理
const browserInfo = userAgentData.brands.find(
(data) => data.brand === CHROME || data.brand === EDGE
);
console.log(browserInfo)
if(browserInfo.brand === CHROME){
console.log("Chromeの場合の処理")
}
} else {
// UA-CHで取得できなかった為、UAParser.jsを利用する
}
})();
참고 자료
각주
지정
undefined
된tsconfig.json
을 통해 자바스크립트의 API와 브라우저가 제공하는 API의 유형 정의를 결합할 수 있음↩︎Reference
이 문제에 관하여(User Agent Client Hints를 사용하여 브라우저를 판단할 때 고려할 사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kata_n/articles/c9da7a367847f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)