【发布时间】:2020-01-20 23:41:09
【问题描述】:
Apple 的 iOS 13 发布后,我意识到 iPad iOS 13 上的 Safari 中的 window.navigator.userAgent 与 MacOS 上的相同。像这样的:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15
如您所见,这是一个错误的 iPad 用户代理,无法检测当前设备是否为 iDevice。
经过初步研究,我找到了解决方法:
转到设置 -> Safari -> 请求桌面网站 -> 所有网站。您注意到“所有网站”默认启用。如果您禁用它并获取 window.navigator.userAgent,则现在会显示正确的用户代理。
但我不能要求每个用户为每个设备进行此设置更改。所以我试图找到另一种方法并最终编写了以下代码来检查它是否是 Safari、macOS 和触摸屏,那么该设备应该是苹果移动设备,但我想知道是有更好的建议/方法来检测 Safari iOS 13 中的正确设备名称吗?
detectOs = function(){
//returns OS name, like "mac"
};
//is Safari on an apple touch-screen device
isSafariInIdevice = function(){
if (/Safari[\/\s](\d+\.\d+)/.test(windows.navigator.userAgent)) {
return 'ontouchstart' in window && detectOs() === "mac";
}
return false;
};
【问题讨论】:
-
我遇到了同样的问题,但我需要检查服务器端,以便我可以在 Safari iOS13 上显示移动端菜单而不是完整的网站菜单。你能帮我解决这个问题吗? stackoverflow.com/questions/58344491/…
-
为什么你需要知道这个?通常浏览器嗅探是一个坏主意。相反,您应该编写您的应用程序,以便它可以平等地在所有浏览器上运行。如果您需要区分浏览器的功能,请查看feature detection。
-
OP,您能否将@kikiwora 的答案标记为已接受
-
OP,如果它确实解决了您的问题,您能否将@kikiwora 的答案标记为已接受?如果没有,如果您在此解决方案中遇到其他问题,请告诉我们。
标签: javascript ios safari user-agent ios13