2016-10-26 15 views
0

내 웹 사이트에서 새로운 webforms 솔루션 (즉, Site.Master & Site.Mobile.Master)에 기본적으로 생성 된 두 개의 마스터 페이지를 사용했습니다. 필자는 모바일 용 마스터 페이지가로드되지 않고 오히려 "정상적인"마스터 페이지 인 모바일 용 Firefox를 발견했습니다. 모바일 또는 다른 브라우저 용 크롬으로 모든 것이 잘 작동합니다. 해결책에 실질적인 변화를 주었고 어떤 경우에도 모바일 마스터 페이지가 기본적으로로드되지 않습니다 (크롬 개발자 도구 포함). 나는 크롬 잘 작동이 솔루션를 알려준 몇 가지 연구를 수행하지만 여전히 파이어 폭스와 false를 반환 한 :모바일 마스터 페이지가 자동으로 실행되지 않음

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

여기서 문제는 모든 단일 aspx 페이지에 포함해야한다는 것입니다. 나는 많은 연구를 해왔고 그것에 관한 문서가 아주 가난하다는 것을 인정해야한다. web.config 파일에 추가 할 수있는 설정이 없거나 모든 aspx 페이지에서 브라우저를 확인할 필요가 없도록 global.asax에 추가 할 코드가 있습니까?

답변

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; 
} 
관련 문제