gpt4 book ai didi

c# - Request.Browser.IsMobileDevice 不适用于 iPadAir2 和 iOS 13.0.1

转载 作者:行者123 更新时间:2023-12-03 18:45:38 27 4
gpt4 key购买 nike

我能够使用 Request.Browser.IsMobileDevice 检测在 iOS 11.4 上运行的 iPadAir2 设备,它会向我提供 UserAgent 信息,说明它是 iPad: enter image description here

当我对在 iOS 13.0.1 上运行的 iPadAir2 执行相同操作时,它不再为我提供 iPad 关键字: enter image description here

如何检测其是否为 ipad 并正在运行 safari 浏览器?

我需要它来检测 Razor .chtml 页面中的 iPad,以便我可以为我的网站显示不同的菜单。

我从这里找到了这个解决方案How to detect device name in Safari on iOS 13 while it doesn't show the correct user agent?

let isIOS =/iPad|iPhone|iPod/.test(navigator.platform) ||(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)

如何在 Razor 中使用此变量来更改网站菜单?

最佳答案

在 iOS 13 之前(也就是 Safari 开始默认“撒谎”之前),我们可以有这样的解决方案:https://stackoverflow.com/a/32947785/292502 。现在,iPad Safari 默认模仿桌面用户代理,这让开发人员陷入困境,除非用户可以关闭 Safari 行为(通常用户甚至不知道设备是 Android 平板电脑还是 iPad)。

ASP.NETC# Detect Mobile Browsers 的版本脚本也在 C# 环境中运行,您需要访问 navigator JavaScript 对象的其他字段。

因此,我们必须将整个检测代码移至您的 JavaScript 文件之一中。然后你就从 JavaScript 开始或jQuery版本Detect Mobile Browsers脚本。我将其转换为一个仅返回 bool 值判决的函数。

您可以添加其他人建议的额外内容,但在这里我们需要做出选择:关于我们想要检测设备类型的真正原因是什么。

  1. 如果我们同意触摸屏 iBook 或 iMac 被视为移动设备,那么我们可以采用简单的(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) 输入额外的方法。 对于 M1 Mac,此标准不起作用,因为它们是基于 ARM 的。这取决于导航器对它们的评价。如果我们的主要原因与触摸屏导航有关,那么这会起作用。
  2. 如果我们因为外形因素而不只是触摸功能而更关注手机/平板电脑,那么第一种方法就不够了。我们需要进行一些额外的测试来揭露“撒谎”的 Safari。被否决的https://stackoverflow.com/a/59408181/292502显示了一种可能性。除了测试一些破坏它的自定义功能之外,没有其他方法可以揭露撒谎的 Safari。该解决方案的缺点是,如果将来测试的功能发生变化,它可能会很脆弱。

我的解决方案是:

function detectmobilebrowser() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od|ad)|android|playbook|silk|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(userAgent) ||
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(userAgent.substr(0, 4)))
return true;

// Lying iOS13 iPad
if (userAgent.match(/Macintosh/i) !== null) {
// need to distinguish between Macbook and iPad
var canvas = document.createElement("canvas");
if (canvas !== null) {
var context = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
if (context) {
var info = context.getExtension("WEBGL_debug_renderer_info");
if (info) {
var renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL);
if (renderer.indexOf("Apple") !== -1)
return true;
}
}
}
}

return false;
}

第一部分是 jQuery Detect Mobile Browser 的修改版本。修改是通过将 ad 添加到 |ip(hone|od|ad) 中来实现“非说谎”iPad 支持。然后我添加了说谎的 iPad 检测。 此代码可能需要更多修改和更多测试!然后您可以在适当的位置调用 detectmobilebrowser() 并对其进行操作。由于它已移至 JavaScript 领域,因此不再是 Razor 解决方案,但在我看来,这就是您现在可以解决此问题的方法。

<小时/>

对于我自己的应用程序,您也可以在此处测试此代码:

关于c# - Request.Browser.IsMobileDevice 不适用于 iPadAir2 和 iOS 13.0.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58344491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com