Sae*_*deh 30 javascript safari user-agent ios ios13
在实现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;
};
Run Code Online (Sandbox Code Playgroud)
kik*_*ora 34
确实,尽管“设置”中的选项更改对于用户而言可能是一个不错的解决方案,但作为开发人员,您不能依赖它。要求用户不要使用暗模式是很奇怪的,因为您的应用程序不支持它,而不是使用plist选择不支持它。
对于我来说,现在检测iOS / iPad OS设备的最简单方法是:
let isIOS = /iPad|iPhone|iPod/.test(navigator.platform) ||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)
Run Code Online (Sandbox Code Playgroud)
第一个条件是老式的,并且可以与以前的版本一起使用,而第二个条件适用于iPad OS 13,现在将其标识为“ Mozilla / 5.0(Macintosh; Intel Mac OS X 10_15)AppleWebKit / 605.1.15(KHTML,like Gecko) )”,据我所知,所有平台探测器目前(无论是移动设备还是台式机)均未检测到。
因此,由于iPad OS现在称自己为Macintosh,但实际的Mac不支持多点触控,因此该解决方案非常适合检测iPad OS设备,后者是现有的唯一多点触控“ Macintosh”设备。
PS 另外,您可能希望增加此检查以将IE排除在检测到的iOS设备之外
let isIOS = (/iPad|iPhone|iPod/.test(navigator.platform) ||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&
!window.MSStream
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5607 次 |
最近记录: |