2016-10-26 17 views
0

С моим сайтом я работал с двумя основными страницами, созданными по умолчанию в любом новом решении веб-форм (например, Site.Master & Site.Mobile.Master). Я заметил в firefox для мобильных устройств, что моя главная страница для мобильных устройств никогда не загружается, а скорее «обычная» главная страница. С хром для мобильного или другого браузера все работает нормально. Я внес существенные изменения в свое решение, и теперь главная страница мобильных устройств никогда не загружается по умолчанию в любых случаях (включая встроенные инструменты для Chrome). Я сделал некоторые исследования, которые привели меня к этому решению, которое отлично работает с хромом, но по-прежнему возвращает ложь с светлячками:Домашняя страница для мобильных устройств не запускается автоматически

protected void Page_PreInit(object sender, EventArgs e) 
    { 
     if (Request.Browser.IsMobileDevice) 
     { 
      MasterPageFile = "~/Site.Mobile.Master"; 
     } 
    } 

Проблемы здесь состоит в том, что я должен включить его в каждой отдельной странице ASPX. Я провел много исследований и должен признать, что документация об этом довольно бедна. Нет ли каких-либо настроек, которые я могу добавить в файл web.config или какой-нибудь код для добавления в мой global.asax, чтобы я не просматривал браузер на всех страницах aspx?

ответ

1

. Request.Browser.IsMobileDevice является надежным. Следующий вспомогательный метод мог обнаружить немного больше.

Если вы хотите надежное обнаружение для каждого устройства, включая новые, вы хотите использовать коммерческие услуги, такие как 51Degrees.

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    // *** For debugging, I inverted if statement. 
    //  You can reverse it back after debugging. **** 
    if (!IsMobileBrowser(HttpContext.Current)) 
     MasterPageFile = "~/Site.Desktop.Master"; 
    else 
     MasterPageFile = "~/Site.Mobile.Master";  
} 

public static bool IsMobileBrowser(HttpContext context) 
{ 
    // first try built in asp.net check 
    if (context.Request.Browser.IsMobileDevice) 
    { 
     return true; 
    } 

    // then try checking for the http_x_wap_profile header 
    if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null) 
    { 
     return true; 
    } 

    // then try checking that http_accept exists and contains wap 
    if (context.Request.ServerVariables["HTTP_ACCEPT"] != null && 
     context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap")) 
    { 
     return true; 
    } 

    // Finally check the http_user_agent header variable for any one of the following 
    if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null) 
    { 
     // List of all mobile types 
     string[] mobiles = 
      new[] 
      { 
       "android", "opera mini", "midp", "j2me", "avant", "docomo", "novarra", "palmos", "palmsource", 
       "240×320", "opwv", "chtml", 
       "pda", "windows ce", "mmp/", "blackberry", "mib/", "symbian", "wireless", "nokia", "hand", "mobi", 
       "phone", "cdm", "up.b", "audio", "sie-", "sec-", "samsung", "htc", "mot-", "mitsu", "sagem", "sony", 
       "alcatel", "lg", "eric", "vx", "nec", "philips", "mmm", "xx", "panasonic", "sharp", "wap", "sch", 
       "rover", "pocket", "benq", "java", "pt", "pg", "vox", "amoi", "bird", "compal", "kg", "voda", 
       "sany", "kdd", "dbt", "sendo", "sgh", "gradi", "dddi", "moto", "iphone" 
      }; 

     // Check if the header contains that text 
     var userAgent = context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower(); 

     return mobiles.Any(userAgent.Contains); 
    } 

    return false; 
}