如何检测iOS Mobile Safari和Chrome的"请求桌面版网站"模式?

app*_*aro 11 javascript mobile google-chrome ios

当用户使用iOS移动safari的"请求桌面版网站"或iOS Chrome的"请求桌面版"时,我想发送我的网站的iPad版本.似乎只有用户代理在该模式下是不同的,并且似乎无法检测到.有任何想法吗?

我的网站有三个版本:桌面/平板/智能手机.平板电脑版本是桌面版的静态版本,非常动态并且使用了大量JavaScript(视差效果).

zer*_*mpl 3

我见过一些人使用cookies/sessionStorage来检测不断变化的用户代理,例如http://leavesofcode.net/2013/07/08/responsive-design-with-switch-to-desktop-site-option/https://gist.github.com/dtipson/7401026

但是,我发现您可以通过交叉引用来跳过所有navigator.platform这些navigator.userAgent。这是专门针对 iOS 的,因为我听说 Chrome 的“请求桌面站点”也会自动更新视口,因此可能不需要对其进行此检查。

var iOSAgent = window.navigator.userAgent.match(/iPhone|iPod|iPad/);
var iOSPlatform = window.navigator.platform && window.navigator.platform.match(/iPhone|iPod|iPad/);
var iOSRequestDesktop = (!iOSAgent && iOSPlatform);
Run Code Online (Sandbox Code Playgroud)

  • 看起来这不再有效:platform=MacIntel for Desktop Mode(在 iPadOS 13 Beta 2 上测试)。此外,iPadOS 13 似乎默认将桌面模式设置为 true(检查 Safari 设置)。我目前的解决方法是假设触摸支持仅在 iOS/iPadOS 上而不是 Mac 上,即 document.documentElement 中的“ontouchstart”,而 Safari 表示桌面模式 - 然而这是一个非常肮脏的黑客,因为如果苹果推出带有 MacBook 的设备,它就会崩溃。触碰。我也不知道笔是如何处理的。 (5认同)