響應式設計無法滿足所有業務差異時,需在入口頁根據裝置類型導向專屬頁面(如 m.example.com 或 app下載頁)。
const browser = {
versions: (() => {
const u = navigator.userAgent;
const app = navigator.appVersion;
return {
trident: u.includes('Trident'), // IE 內核
presto: u.includes('Presto'), // Opera 內核
webKit: u.includes('AppleWebKit'), // WebKit 內核
gecko: u.includes('Gecko') && !u.includes('KHTML'), // Firefox 內核
mobile: /AppleWebKit.*Mobile/.test(u) || /AppleWebKit/.test(u), // 行動裝置
ios: /\(i[^;]+;( U;)? CPU.+Mac OS X/.test(u), // iOS
android: u.includes('Android') || u.includes('Linux'), // Android
iPhone: u.includes('iPhone') || u.includes('Mac'), // iPhone / QQ HD
iPad: u.includes('iPad'), // iPad
webApp: !u.includes('Safari') // WebApp 無導航列
};
})(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
};
// 導向邏輯
const target = 'https://m.example.com'; // 行動版首頁
if (browser.versions.mobile || browser.versions.ios || browser.versions.android) {
window.location.href = target;
}
navigator.userAgentData(Chrome 89+)提供結構化裝置資訊,隱私更佳。User-Agent 直接 Rewrite,避免前端閃動。ua-parser-js:輕量、支援瀏覽器/引擎/OS/裝置型號解析。bowser:API 簡潔,TypeScript 友善。