Estoy teniendo un momento muy difícil identificar la fuente de un problema intermitente en un ASP.NET aplicación web que se ejecuta en el navegador Safari en el iPad de tercera generación con iOS 6.0. Lo que sucede es que, en ocasiones, el que <a> etiquetas de configurar como de los hipervínculos que hacer las devoluciones a través de JavaScript de repente deje de funcionar y no parecen hacer nada si toca en la pantalla. Estos incluyen un asp:LinkButton de control que se configura como un enlace de desconexión, y el encabezado de fila de un GridView que está configurado para permitir la fila de la clasificación. No parece haber ninguna rima o razón detrás de ella – que funcionará de forma normal por un rato, y luego se detiene, y me voy más tarde un aviso de que empezar a trabajar de nuevo (sobre todo después de cerrar Safari y re-apertura, a pesar de que no siempre parece funcionar).

El cierre de sesión de control de este aspecto en el archivo aspx:

<asp:LinkButton ID="LogoutButton" onclick="LogoutButton_Click" runat="server">[ Logout ]</asp:LinkButton>

y aparece como que esta en el HTML resultante:

<a id="LogoutButton" href="javascript:__doPostBack(&#39;ctl00$LogoutButton&#39;,&#39;&#39;)">[ Logout ]</a>

Hay algo especial acerca de Safari que se ejecuta en el iPad que podría impedir que tales enlaces se rompan en ocasión, tales como el exceso de carga de datos en la página o en las otras pestañas del navegador, o tal vez algo con el ViewState que está actuando en este escenario? Incluso después de jugar un poco con la aplicación web en el iPad por un tiempo, no puedo encontrar ninguna manera en particular para recrear el problema, así que ni siquiera puedo empezar a tratar de arreglarlo que es realmente frustrante, así que estoy buscando la orientación de aquellos que han desarrollado ASP.NET aplicaciones y conocer el iPad y/o Safari entornos realmente bien. Nunca he tenido este problema se produce en un navegador de escritorio.

Actualización: Usando el truco descrito en esta página acerca de cómo agregar un pseudo-opción Ver código Fuente de Safari en el iPad, ahora he sido capaz de ver la diferencia en el código HTML generado de una página en la devolución de enlaces están funcionando, y una página en la que se detiene. En resumen, la __doPostBack función de JavaScript que ASP.NET normalmente imbeds en la página… simplemente deja de llegar incrustada por alguna razón. Como resultado, el código JavaScript ligado a los vínculos simplemente el error. He aquí lo que ASP.NET normalmente se añade a la página para obtener la devolución de los vínculos de trabajo:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

Este parece ser el mismo problema que se describe en el Foro de soporte de Apple y aquí en TAN. Esto último sugiere que ASP.NET a veces puede ser la falta de reconocimiento de Safari en el iPad como JavaScript capaz y por lo tanto no correctamente insertar el __doPostBack función en la página. Otras JavaScript en mi página todavía está trabajando bien, aunque, por lo que no explican totalmente mi problema.

OriginalEl autor Derek | 2012-10-09

4 Comentarios

  1. 6

    Después de encontrar esta pregunta en Stack Overflow con prácticamente el mismo problema, me encontré con la browserCaps de la página de salida sugerido por Stephen y se encontró que el Safari, cuando se ejecuta en modo de pantalla completa de un enlace en la pantalla inicial del iPad, se apareció a nuestro ASP.NET servidor como un genérico, no de la capacidad del navegador. He aplicado la corrección sugerida por Avada Kedavra en que otra pregunta, lo que implicaba poner esto:

    <browserCaps userAgentCacheKeyLength="256" />

    …en el <system.web> sección de mi web.archivo de configuración, y también esto:

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

    en el archivo de código subyacente de la página web principal de que estaba actuando. Jason Kealey, la fuente de la que otra persona de la revisión, también se sugiere en la sección de comentarios de sus hallazgos que también puede ser útil para agregar esto a una .explorador de archivos en el App_Browsers carpeta de su ASP.NET aplicación web:

    <browsers>
      <browser refID="Mozilla" >
        <capabilities>
          <capability name="cookies"  value="true" />
          <capability name="type" value="Uplevel" />
        </capabilities>
      </browser>
    
      <browser refID="Default">
        <capabilities>
          <capability name="cookies" value="true" />
          <capability name="type" value="Uplevel" />
        </capabilities>
      </browser>
    </browsers>

    Edición:
    He aplicado esta solución para mi aplicación, pero se rompió en otras áreas, específicamente, fue la identificación de Chrome y Safari como «uplevel», que la hizo ser detectado en otras áreas como «IE». El siguiente código hace que esta revisión sólo se aplican a los iDevices cuando no se identifica el agente de usuario como Safari:

    string ua = Request.UserAgent;
    if (ua != null
        && (ua.IndexOf("iPhone", StringComparison.CurrentCultureIgnoreCase) >= 0
        || ua.IndexOf("iPad", StringComparison.CurrentCultureIgnoreCase) >= 0
        || ua.IndexOf("iPod", StringComparison.CurrentCultureIgnoreCase) >= 0)
        && ua.IndexOf("Safari", StringComparison.CurrentCultureIgnoreCase) < 0)
    {
        this.ClientTarget = "uplevel";
    }
    Genial!!! Esto funcionó para mí 🙂 Mi paginación para un listview no estaba funcionando. Aplica la web.config y pagepreinit fix y ahora su trabajo. Un millón de gracias!
    He intentado hacer esto, que no está funcionando para mí, su Ispostback es siempre y no apuntando al evento click
    desde que he publicado esto hace casi cuatro años, puede estar ejecutando en una variante de este problema que no está cubierto aquí, o algo completamente nuevo. Usted es más propenso a resolver su problema si usted publica una nueva pregunta con el código exacto que está utilizando relacionado con su problema.

    OriginalEl autor Derek

  2. 0

    Esta MANERA posterior es similar, y dice que esto puede suceder cuando la página de Salida está habilitada la Caché.

    asp.net: __doPostBack no prestados en algún momento

    Están utilizando OutputCache?

    Que es un buen descubrimiento, pero, por desgracia, no tengo OutputCache definido en cualquier lugar de mi solución. También he comprobado en la Salida de Caché en la configuración de IIS, y no hay absolutamente ninguna lista.
    Tal vez usted estaba en la pista de la derecha con la UA cadena y conseguir el mal navegador tapas. ¿Qué versión de .NET estás usando? .NET 1.x fue horrendo en la identificación de otra cosa que de IE. 2.x (hasta 3.5) no era muy bueno. En realidad hizo un buen progreso con la 4.0, y se pueden identificar algunos dispositivos móviles como tal (creo que todos los dispositivos iOS son identificados como el iPhone). Mi siguiente paso sería copiar el código aquí slingfive.com/pages/code/browserCaps/… y busque allí desde su servidor a través de su iPad para ver lo que el navegador cree que se están utilizando.
    Es un .NET 4.0 de la aplicación. Pongo el navegador tapas de volcado de Safari en el iPad pastebin, si usted es curioso. Yo no veo nada que inmediatamente salta a mí como lo que podría estar causando el problema. La Plataforma es «Desconocido», pero que no necesariamente explicar por qué el JavaScript funciona algunas veces y otras no.
    Hmm, parece que he encontrado a otra persona con la mismo problema exacto, y he notado que mi problema a menudo se inicia después de que se inicia la aplicación en modo de pantalla completa desde una pantalla de inicio enlace. Estoy investigando más.
    Se parece a la corrección sugerida en el enlace que he enumerado anteriormente funcionó! Comprobación del navegador tapas de info para cuando mi app dejó de funcionar producido el listado puede ver aquí en pastebin. Esteban, gracias de nuevo por tu ayuda – me upvoted su sugerencia acerca de la comprobación de que el navegador tapas, ya que me llevó a la respuesta correcta, pero voy a resumir mi solución en una respuesta diferente, ya que en última instancia no estaba relacionado con el OutputCache.

    OriginalEl autor Stephen

  3. 0

    Haber tenido el mismo problema con un sitio que ejecuta Umbraco en AppMode (modo de Pantalla Completa) en iOS7, he probado todas las sugerencias anteriores fue en vano. Sin embargo, me’vee encontró que una ligera extensión de Regexident la respuesta anterior, sumado a que el navegador por defecto, parecía hacer el truco.

    <capability name="jscriptversion"       value="5.6" />
    <capability name="javascript"           value="true" />
    <capability name="javascriptversion"    value="1.5" />

    Retirar el original post by Aristos

    Espero que esta ayuda como lo fue para mí.

    OriginalEl autor Xrimson

  4. 0

    Coloqué debajo de la definición en un explorador de archivos bajo el App_Browsers carpeta y funcionó perfecto.
    ��

    <browsers>
    <browser id="safariiphone" parentID="mozilla">
    <identification>
    <userAgent match="AppleWebKit"/>
    </identification>
    <capabilities>
    <capability name="version"                         value="${version}" />
    <capability name="majorversion"                    value="${major}" />
    <capability name="minorversion"                    value="${minor}" />
    <capability name="type"                            value="Safari${major}" />
    <capability name="ecmascriptversion"               value="3.0" />
    <capability name="javascript"                      value="true" />
    <capability name="javascriptversion"               value="1.6" />
    <capability name="w3cdomversion"                   value="1.0" />
    <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
    <capability name="cookies"                         value="true" />
    <capability name="frames"                          value="true" />
    <capability name="javaapplets"                     value="true" />
    <capability name="supportsAccesskeyAttribute"      value="true" />
    <capability name="supportsCallback"                value="true" />
    <capability name="supportsDivNoWrap"               value="false" />
    <capability name="supportsFileUpload"              value="true" />
    <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
    <capability name="supportsMultilineTextBoxDisplay" value="true" />
    <capability name="supportsXmlHttp"                 value="true" />
    <capability name="tables"                          value="true" />
    </capabilities>
    </browser>
    </browsers>

    OriginalEl autor Mask

Dejar respuesta

Please enter your comment!
Please enter your name here