【发布时间】:2021-12-29 00:39:34
【问题描述】:
我正在将扩展程序从 Chrome/Firefox 移植到 iOS 上的 Safari。当扩展弹出窗口出现时,iOS 上的 Safari 上有两种不同的行为。在 iPhone 上,它从屏幕底部以全屏宽度菜单的形式出现。在 iPad 上,它的行为与 MacOS 上的 Safari 类似,并且弹出窗口从工具栏中的扩展图标下拉,并且是动态大小的。
我想在我的 javascript 代码中检测这两种不同的情况。在前一种情况下,我想避免设置弹出窗口的宽度(因为这会导致问题),在后一种情况下,我确实想设置宽度(就像我在 Chrome 等中所做的那样)。
我不确定这是否是检测 iPad 与 iPhone 的案例(但我很想知道如何做到这一点)。可能有一个屏幕尺寸足够大的 iPhone 会导致它使用后一种行为。
【问题讨论】:
-
所以
window.navigator.userAgent没有区别? -
@matt 过去我发现这对于确定 ipad 与 iphone 是不可靠的。不过最近情况可能发生了变化
-
可以使用用户代理来确定 iPhone 还是 iPad。以下是我进行的一些快速测试: Mac 上的 Chrome:Mozilla/5.0(Macintosh;Intel Mac OS X 10_15_7)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/96.0.4664.93 Safari/537.36 iPad Pro 12.9 英寸第 5 代 iOS 15模拟器:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) 版本/15.0 Safari/605.1.15 iPhone8 iOS 15.0 模拟器:Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1
-
因此可能有人可以在字符串中搜索“iPhone”。但是,正如 justinw 指出的那样,它在 iPad 上的拆分视图中可以表现得像 iPhone。所以我现在正在寻找一个测试,它会告诉我弹出窗口是否从底部以全窗口宽度出现
-
@Namaste 还请记住,如果用户请求网站的桌面版本,它可能不会显示在用户代理中的
iPad或iPhone