3

ユーザーがタブレットコンピューターからサイトにアクセスしている場合、デスクトップバージョンのサイトを表示しようとしています。メソッド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;
    }
4

2 に答える 2

0

タブレット デバイスで使用可能なピクセル数を確認できます。

var isTablet = httpContext.Request.Browser.IsMobileDevice && httpContext.Request.Browser.ScreenPixelsWidth > 768
于 2012-11-16T17:40:02.943 に答える
0

表示モード ロジックは、登録されている順序で一致を検索します。デフォルトのモバイル モードは追加する前に登録されるため、新しいモバイル モードが評価されることはありません。

一般的なパターンは、表示モードを追加するのではなく、インデックス 0 に新しい表示モードを挿入することです。それ以外の:

DisplayModeProvider.Instance.Modes.Add(mobileMode);

使用する:

DisplayModeProvider.Instance.Modes.Insert(0, mobileMode);

または、ブラウザーの定義 (例: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers) を変更して、iPad がモバイル デバイスではなく、複雑になる可能性があることを示すことができます。

また、注意すべき点が 1 つあります。明らかに、iPad は異なるユーザー エージェントを報告することがあります。デバイス モードの選択ロジックでは、両方のケースを考慮する必要があります。

于 2012-07-30T18:43:30.847 に答える