如果用户从平板电脑访问该网站,我正在尝试显示该网站的桌面版本。方法contextCheck_WithDirectMethod确实返回false,但移动版仍然在我的ipad上显示。如何解决这个问题的任何帮助将非常感激。
protected void Application_BeginRequest(object sender, EventArgs e)
{
System.Func<HttpContextBase, bool> contextCheckDelegate = contextCheck_WithDirectMethod;
DefaultDisplayMode mobileMode = new DefaultDisplayMode("mobile");
mobileMode.ContextCondition = contextCheckDelegate;
DisplayModeProvider.Instance.Modes.Add(mobileMode);
}
public bool contextCheck_WithDirectMethod(HttpContextBase objHttpContextBase)
{
bool isTablet = false;
string varBrowserAgent = objHttpContextBase.Request.UserAgent;
if (!string.IsNullOrEmpty(varBrowserAgent))
{
varBrowserAgent = varBrowserAgent.ToString().ToLower();
if (varBrowserAgent.Contains("ipad") || (varBrowserAgent.Contains("android") && !varBrowserAgent.Contains("mobile")))
{
isTablet = true;
objHttpContextBase.ClearOverriddenBrowser();
}
}
if (!isTablet)
{
if (objHttpContextBase.GetOverriddenBrowser().IsMobileDevice)
{
return true;
}
}
if (!string.IsNullOrEmpty(varBrowserAgent))
{
varBrowserAgent = varBrowserAgent.ToString().ToLower();
if (objHttpContextBase.Request.Browser.IsMobileDevice == true || varBrowserAgent.Contains("ipod") || varBrowserAgent.Contains("ipad")
|| varBrowserAgent.Contains("iphone") || varBrowserAgent.Contains("android") || varBrowserAgent.Contains("iemobile"))
{
if (isTablet)
return false;
else
return true;
}
}
return false;
}
答案 0 :(得分:0)
显示模式逻辑按照注册顺序查找匹配项。默认移动模式在您添加之前已注册,因此永远不会评估您的新移动模式。
一般模式是在索引0处插入新的显示模式,而不是添加显示模式。而不是:
DisplayModeProvider.Instance.Modes.Add(mobileMode);
使用:
DisplayModeProvider.Instance.Modes.Insert(0, mobileMode);
或者,您可以更改浏览器定义(例如C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ Browsers)以指示iPad不是移动设备,但这可能会变得复杂。
另外,有人要注意:显然iPad sometimes reports a different user agent。您的设备模式选择逻辑需要考虑这两种情况。
答案 1 :(得分:0)
您可以查看平板电脑设备中的可用像素数:
var isTablet = httpContext.Request.Browser.IsMobileDevice && httpContext.Request.Browser.ScreenPixelsWidth > 768