2012-07-21 18 views
11

Acabo de descargar Google Chrome para iPad y me di cuenta de que no funciona con ASP.NET 4 sitios web!Chrome en iPad no funciona con ASP.NET 4

Por ejemplo, crear una página sencilla:

<%@ Page Language="VB" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 

Protected Sub LinkButton1_Click(sender As Object, e As System.EventArgs) 
    Response.Write("Link button was clicked") 
End Sub 

</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">LinkButton</asp:LinkButton> 
    </div> 
    </form> 
</body> 
</html> 

Ahora intente hacer clic en el botón de vínculo, pero no se dispara el evento de devolución.

Parece que no puedo depurar porque no hay una consola de JavaScript para averiguar qué está pasando.

!! ¡ACTUALIZACIÓN!

he encontrado que es necesario seleccionar el sitio de escritorio Solicitud de los ajustes del menú desplegable en Chrome para conseguir que funcione.

!! ¡ACTUALIZACIÓN!

ASP.NET no reconoce las versiones más actualizadas de algunos navegadores y, en consecuencia, los tratará como navegadores de nivel inferior. (Básicamente: sin JavaScript.) La solución es obtener archivos actualizados de definición del navegador.

¿Dónde podemos obtener un archivo de definición de navegador actualizado para Chrome?

+0

asp.net no tienen nada que ver con los navegadores cliente - navegadores no sabían lo que está detrás del servidor que acaba de leer HTML. – Aristos

+0

es el código que se genera automáticamente para los eventos de devolución de datos que está causando problemas. Probablemente sea culpa de Google: tal vez un error con su navegador ipad cuando no esté en el 'modo de escritorio del sitio' (lo que sea que sea). –

+0

Uso solo google chrome y no tuve ningún problema con programas muy difíciles. – Aristos

Respuesta

8

he experimentado el mismo problema. La mayoría de las cosas funcionan bien en mi página, solo algunos elementos que se modifican en el lado del cliente se muestran incorrectamente.

inspeccioné los ficheros de cabecera que se devuelven de cada navegador en el IPAD, y se encontró que cuando se encuentra en Chrome en modo de escritorio, que sólo estaba fingiendo ser un una caja de Mac, enviando el siguiente en la cabecera: Mozilla /5.0+(Macintosh;+Intel+Mac+OS+X+10_7_3)+AppleWebKit/534.53.11+(KHTML,+like+Gecko)+Version/5.1.3+Safari/534.53.10

y cuando está en modo estándar detecta lo siguiente en el encabezado: Mozilla/5.0 + (iPad; + CPU + OS + 6_0 + como + Mac + OS + X) + AppleWebKit/534.46.0 + (KHTML, + como + Gecko) + CriOS/21.0.1180.82 + Móvil/10A403 + Safari/7534.48.3

Intenté agregar un nuevo navegador a mi directorio "app_browsers", copiando "chrome" y volviéndolo a llamar "chromeios", y reemplazando el uso de "chrome" dentro con CriOS.Esto no hizo nada, y ni siquiera estoy seguro de que los archivos en el directorio "app_Browsers" estén haciendo algo.

Fue entonces cuando me encontré con esta pregunta. Las respuestas sugeridas por los usuarios vamshik y Jay Douglass, cuando se armaron funcionaron para mí.

Jay's sin embargo era incorrecto en cuanto a que tiene el agente de usuario equivocado (debería ser "crios").

El usuario geo1701 sin embargo se quejó de agregar esto a cada página. Esto puede hacerse fácilmente creando una clase que herede System.Web.UI.Page y luego agregue el código anterior con el evento "protected void Page_PreInit", y luego reemplace la herencia en cada página web con su nueva clase. Entonces, si alguna vez necesitas agregar algo que se necesita en cada página, tienes esa clase para agregarlo también.

¿Me pregunto si hay alguna forma de agregarlo a la clase global.asax? pero supongo que no ...

Estamos buscando una solución mejor. Si encuentro uno, lo actualizaré.

encontrado los siguientes mensajes relacionados:

Chrome for iOS user agent on iPad

ASP.NET Webforms Doesn't Render Postback JavaScript Function for Chrome/iOS

ACTUALIZACIÓN encontré this por Scott Hanselman. Mientras él habla sobre las cookies, creo que sus sugerencias pueden enviarnos en la dirección correcta.

OK! ACTUALIZACIÓN FINAL !!!

Después de instalar .NET Framework 4.5 y eliminar los archivos de mi directorio app_browsers, Chrome en mi iPad está funcionando. Miré las entradas en los nuevos archivos .Browser proporcionados por .net 4.5, y no había nada extraordinario, así que supongo que también hubo más que actualizar algunos a los archivos .browser.

.NET Framework 4.5 se puede descargar here

+0

Actualizar a 4.5 funcionó como un encanto! ¡Gracias! –

1

ASP.NET puede detectar incorrectamente Chrome en el iPad como un navegador de "nivel inferior" que no admite JavaScript. ASP.NET utiliza la cadena de agente de usuario para detectar navegadores de nivel inferior. Para forzar Chrome para ser detectado como un navegador de "alta gama", usted puede hacer esto:

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    if (Request.UserAgent != null && Request.UserAgent.IndexOf("chrome", StringComparison.OrdinalIgnoreCase) > -1) 
    { 
     this.ClientTarget = "uplevel"; 
    } 
} 
+1

Debe haber una forma de anular la detección en machine.config en lugar de agregar este tipo de código a cada página. –

0

Es probable que ASP.NET genera página no válida.

No sé sobre iPhone, pero la versión de Android tiene Remote Debugging. Puedes intentar inspeccionar la página allí.

+0

¿Qué te hace decir que es probable que ASP.NET genere una página no válida? Teniendo en cuenta que estamos hablando de ASP.NET 4.0 aquí. –

+0

asp.net no representa javascripts porque considera el navegador como de nivel inferior. – Ashish

1

A continuación trabajó para mí ...

if (Request.UserAgent != null && Request.UserAgent.IndexOf("crios", StringComparison.OrdinalIgnoreCase) > -1) 
{ 
    this.ClientTarget = "uplevel"; 
}