iOS 8 / Safari 8 no funciona con ASP.NET AJAX-Extensions

Nuestro sitio web de repente dejó de funcionar cuando se lanzó iOS 8. Cada devolución posterior desde un ASP.NET UpdatePanel conduce a una página vacía. Todavía funciona, si el usuario-agente está configurado en “Chrome” desde Safari 8 (en Mac).

Ya he rastreado, que algunos de los archivos “ScriptResource.axd” y “WebResource.axd” no se cargan en absoluto. También hay un error al decir “Sys.WebForms” no está definido (probablemente debido a los archivos de script faltantes).

Estamos utilizando ASP.NET 2.0 con AJAX-Extensions 1.0 (lo sé, bastante anticuado. Pero solía funcionar o podría arreglarse hasta ahora).

Tenga en cuenta que esta solución solo es aplicable a la versión .NET <4.0

Asi que aqui esta…

UA de trabajo: Mozilla / 5.0 (Windows NT 6.2; WOW64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 29.0.1547.57 Safari / 537.36

No funciona UA: Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit / 600.1.17 (KHTML, como Gecko) Versión / 7.1 Safari / 537.85.10

El problema radica en la versión principal: cambiar a AppleWebKit / 600. ASP.NET AJAX no reconoce correctamente el nuevo navegador Safari 8 (también con iOS 8). Piensa que no hay soporte para la representación parcial. Lo encontré en esas líneas de “PageRequestManager.cs”:

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

MinimumEcmaScriptVersion / MinimumW3CDomVersion son ambos 1. Request.Browser me dio el siguiente resultado:

 W3CDomVersion = 1.0 EcmaScriptVersion = 1.0 SupportsCallback = false 

Aunque “EcmaScriptVersion” tiene un valor extraño, el problema se debe principalmente a que SupportsCallback es falso.

El error se encuentra en el archivo “mozilla.browser” que se envía con ASP.NET (ubicado en algún lugar de “C: \ Windows \ Microsoft.NET”):

                                 

Todo lo más nuevo que “Safari 85” estaba destinado a ser atrapado por la última definición. Pero debido a una expresión regular desordenada, “Safari 600” se detecta falsamente como “Safari60”:

  

Debería haber sido

  

Resolví este problema agregando un archivo personalizado “App_Browsers \ safari.browser” a mi aplicación con el siguiente contenido:

                           

El problema se reproduce solo cuando uno usa la función de capacidad del navegador personalizado, es decir, uno tiene archivos .browser en su carpeta / App_Browsers. El motivo es que Microsoft lanzó una vez una solución (consulte http://support.microsoft.com/kb/2836946 para obtener más información) que abordaba algunos problemas de capacidad del navegador, incluido el problema que estamos viendo aquí; sin embargo, la corrección no tendría efecto cuando uno usa la función de capacidad del navegador personalizado debido a problemas de compatibilidad. Por lo tanto, para cualquier persona que use archivos personalizados de capacidad del navegador, desafortunadamente, la mejor manera de resolver el problema informado es adoptar la solución provista por Tobias81.

Implementé la solución mencionada anteriormente por @ Tobias81 y obtuve el mensaje “El navegador o elemento de puerta de enlace con identificación ‘Safari60’ no se puede encontrar”. Por lo tanto, solucioné el problema cambiando el elemento en el archivo web.config de mi aplicación para que coincida con la versión más nueva y asigne las capacidades correctas.

     EcmaScriptVersion = 1.5 supportsCallback = true