programing

iOS 8/Safari 8은 ASP에서 작동하지 않습니다.NET AJAX 확장

batch 2023. 4. 6. 21:22
반응형

iOS 8/Safari 8은 ASP에서 작동하지 않습니다.NET AJAX 확장

iOS 8이 출시되었을 때 저희 웹사이트가 갑자기 작동을 멈추었습니다.ASP 내의 모든 포스트백NET UpdatePanel은 빈 페이지로 이어진다.Safari 8(Mac의 경우) 내에서 사용자 에이전트가 "Chrome"로 설정되어 있으면 계속 작동합니다.

Script Resource의 일부를 이미 추적했습니다.Axd" 및 "WebResource"를 선택합니다.axd" 파일은 전혀 로드되지 않습니다.또, 「Sys」라고 하는 에러도 있습니다.WebForms"는 정의되지 않았습니다(스크립트 파일이 누락되었기 때문일 수 있습니다).

ASP를 사용하고 있습니다.AJAX-Extensions 1.0을 사용하는 NET 2.0(알고 있습니다.하지만 예전에는 일했거나 지금까지 고칠 수 있었습니다.)

이 솔루션은 에만 적용된다는 점에 주의해 주세요.NET 버전 4.0 미만

자, 여기...

작동 중인 UA: Mozilla/5.0(Windows NT 6.2; WOW64) Apple WebKit/537.36(KHTML, Gecko 등) Chrome/29.0.1547.57 Safari/537.36

동작하지 않는 UA: Mozilla/5.0 (Macintosh, 인텔 Mac OS X 10_9_5) Apple WebKit/600.1.17 (KHTML, Gecko )버전/7.1 Safari/537.85.10

Apple WebKit/600의 메이저버전 변경에 문제가 있다.ASPNET AJAX는 새로운 Safari 8 브라우저(iOS 8에서도)를 올바르게 인식하지 못합니다.부분 렌탈은 지원되지 않는다고 생각합니다."PageRequestManager.cs"의 다음 행에서 찾았습니다.

bool supportsPartialRendering = (browser.W3CDomVersion >= MinimumW3CDomVersion) && (browser.EcmaScriptVersion >= MinimumEcmaScriptVersion) && browser.SupportsCallback;

최소 EcmaScript 버전/최소 W3CDomVersion은 둘 다 1입니다.요청합니다.브라우저는 다음과 같은 결과를 얻었습니다.

W3CDomVersion = 1.0
EcmaScriptVersion = 1.0
SupportsCallback = false

"EcmaScriptVersion"에 이상한 값이 있는데 이 문제는 주로 SupportsCallback being false에 의해 발생합니다.

이 버그는 ASP에 부속된 "mozilla.browser" 파일에 있습니다.NET ('C:'에 위치)\Windows\Microsoft.네트워크":

<browser id="Safari60" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="60" />
</identification>
<capture>
</capture>
<capabilities>
  <capability name="ecmascriptversion"       value="1.0" />
  </capabilities>
</browser>

<browser id="Safari85" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="85" />
  </identification>
  <capture>
  </capture>
  <capabilities>
    <capability name="ecmascriptversion"       value="1.4" />
  </capabilities>
</browser>

<browser id="Safari1Plus" parentID="Safari">
  <identification>
    <capability name="appleWebTechnologyVersion" match="\d\d\d" />
  </identification>
  <capture>
  </capture>
  <capabilities>
    <capability name="ecmascriptversion"       value="1.4" />
    <capability name="w3cdomversion"           value="1.0" />
    <capability name="supportsCallback"        value="true" />
  </capabilities>
</browser>

"사파리 85"보다 새로운 것은 모두 마지막 정의에 따라 캐치되어야 합니다.그러나 잘못된 정규 표현으로 인해 "Safari 600"이 "Safari 60"으로 잘못 검출되었습니다.

<capability name="appleWebTechnologyVersion" match="60" />

그랬어야 했는데

<capability name="appleWebTechnologyVersion" match="60$" />

이 문제는 다음 내용을 포함한 커스텀파일 "App_Browsers\safari.browser"를 응용 프로그램에 추가하여 해결했습니다.

<browsers>
  <browser id="Safari60_bugfix" parentID="Safari60">
    <identification>
      <capability name="appleWebTechnologyVersion" match="^\d{3,}$" />  <!-- At least 3 digits -->
    </identification>

    <capabilities>
      <!-- Same as in "Safari1Plus" -->
      <capability name="ecmascriptversion" value="1.4" />
      <capability name="w3cdomversion" value="1.0" />
      <capability name="supportsCallback" value="true" />
     </capabilities>
  </browser>

  <browser id="Safari85_bugfix" parentID="Safari85">
    <identification>
      <capability name="appleWebTechnologyVersion" match="^\d{3,}$" />  <!-- At least 3 digits -->
    </identification>

    <capabilities>
      <!-- Same as in "Safari1Plus" -->
      <capability name="ecmascriptversion" value="1.4" />
      <capability name="w3cdomversion" value="1.0" />
      <capability name="supportsCallback" value="true" />
    </capabilities>
  </browser>
</browsers>

이 문제는 커스텀브라우저 기능을 사용하는 경우(\App_Browsers 폴더에 .browser 파일이 있는 경우)에만 재현됩니다.그 이유는 Microsoft가 이 문제를 포함한 일부 브라우저 기능 문제를 해결한 수정 프로그램을 릴리스한 적이 있기 때문입니다(자세한 내용은 http://support.microsoft.com/kb/2836946 참조). 단, 호환성 문제로 인해 커스텀 브라우저 기능 기능을 사용하는 경우에는 이 수정 프로그램이 적용되지 않습니다.따라서 유감스럽게도 커스텀브라우저 기능 파일을 사용하는 사용자는 Tobias81에서 제공하는 회피책을 채택하는 것이 가장 좋습니다.

위의 @Tobias81의 솔루션을 구현했더니 "The browser or gateway element(ID가 'Safari60'인 브라우저 또는 게이트웨이 요소를 찾을 수 없습니다)" 오류가 발생했습니다.따라서 어플리케이션의 web.config 요소를 새로운 버전과 일치하도록 변경하여 올바른 기능을 할당함으로써 문제를 해결했습니다.

<configuration>   
  <system.web>     
    <browserCaps>       
      <filter>
        <case match="AppleWebKit/600">EcmaScriptVersion = 1.5           
          supportsCallback = true         
        </case>       
      </filter>     
    </browserCaps>   
  </system.web>
</configuration>

언급URL : https://stackoverflow.com/questions/25978746/ios-8-safari-8-not-working-with-asp-net-ajax-extensions

반응형