2009-05-27 754 views
5

******************** Editar 2 *************** ******* Descubrí el problema ... Pero no me gustan las implicaciones. Estaba probando nuestra aplicación móvil dirigida a iPhone anteriormente y usando un complemento para enmascarar la cadena de agente de usuario de Firefox como un iPhone.ASP.net no genera javascript para algunos Agentes de usuario

.NET no generó en realidad el código requerido para los respaldos de la publicación basándose solo en esa información.

No me gusta esto, sin embargo, dado que el iPhone y otros dispositivos multimedia pueden interpretar javascript, ASP.net está rompiendo cualquier aplicación que se base en el Javascript generado por el servidor para ejecutarse.

Entonces, si la comunidad lo permite ... Me gustaría cambiar mi pregunta oficial a ... ¿Por qué ASP.net no generará JavaScript para navegadores específicos y cómo puedo desactivar esta "función"?

*************** End Editar 2 ***************

Tengo un extraño problema. Copié un código de trabajo de mi host remoto a mi computadora en el trabajo. Cuando trato de utilizar la página que estoy recibiendo un error de JavaScript

__doPostBack is not defined 
javascript:__doPostBack('ctl00$ContentPlaceHolder1$login','')()() 

cuando pocos el origen de la página de salida, por supuesto no hay lado del servidor genera JavaScript.

intenté crear una página sencilla:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="jsTest.aspx.vb" Inherits="_jsTest" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:TextBox ID="tbTest" runat="server"></asp:TextBox><br /> 
     <asp:LinkButton ID="linkTest" runat="server">LinkButton</asp:LinkButton> 
    </form> 
</body> 
</html> 

Codebehind:

Partial Class _jsTest 
    Inherits System.Web.UI.Page 
    Protected Sub linkTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles linkTest.Click 
     Response.Write(tbTest.Text) 
    End Sub 
End Class 

conseguir el mismo error.

He intentado reiniciar (hey, funciona la mitad de las veces), limpié todo desde App_Code, global.asax y web.config, agregué un cuadro de texto con autopostback = true ... Me he quedado sin ideas.

¿Alguien puede arrojar algo de luz sobre lo que está sucediendo aquí?

************** Más información ************** Acabo de intentar todo de nuevo en IE y funciona como se esperaba, la página fuente de muestra:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" /> 

<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> 
<div> 
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" /> 
</div> 

Si bien la fuente en Firefox sólo se muestra:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" /> 

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" /> 

Almacenamiento de las páginas web en el escritorio y la apertura en libreta revela lo mismo ...

+0

Estoy investigando ... Parece que se puede solucionar con una sección en web.config o machine.config. Por defecto, los navegadores desconocidos se están tratando como un viejo navegador incapaz de javascript. – Birk

Respuesta

7

El problema es la forma predeterminada en que ASP.net trata navegadores desconocidos ... como el iPhone. Aunque sería bueno suponer que los navegadores desconocidos podrían usar javascript ... puede especificar qué capacidades tiene un navegador en la sección de web.config o machine.config.

Salida http://slingfive.com/pages/code/browserCaps/ durante browserCaps actualizados archivos de configuración de asp.net

Aquí es un ejemplo de un caso para que coincida con los navegadores basados ​​en GECKO (Netscape 6+, Mozilla/Firefox, ...)

<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?"> 
       browser=Gecko 
       <filter> 
        <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))"> 
         type=${type} 
        </case> 
        <case> <!-- plain Mozilla if no VendorProductToken found --> 
         type=Mozilla 
        </case> 
       </filter> 
       frames=true 
       tables=true 
       cookies=true 
       javascript=true 
       javaapplets=true 
       ecmascriptversion=1.5 
       w3cdomversion=1.0 
       css1=true 
       css2=true 
       xml=true 
       tagwriter=System.Web.UI.HtmlTextWriter 
       <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))"> 
        version=${version} 
        majorversion=0${major} 
        minorversion=0${minor} 
        <case match="^b" with="${letters}"> 
         beta=true 
        </case> 
       </case> 
      </case> 
+0

Me pegaste - BrowserCaps es de hecho el problema aquí - Es posible que desees consultar http://owenbrady.net/browsercaps/, que se actualizó más recientemente para 1.1 y 2.0 - accesorios para http://stackoverflow.com/ preguntas/431765/asp-net-request-browser-crawler-dynamic-crawler-list/431991 # 431991 para este. –

0

¿seguro tiene ASP.NET instalado en su ¿Servidor web?

+0

Sí, estoy usando Visual Studio 2008 9.0.30729 Framework 3.5 SP1 – Birk

0

Parece que la función __doPostBack() no se está generando porque no tiene eventos del lado del servidor que lo requieran.

A ASP.NET le gusta generar solo la función __doPostBack() cuando tiene suscriptores de eventos suscritos que necesitarían que funcione correctamente.

+0

Protegido Sub linkTest_Click (ByVal sender como objeto, ByVal e como System.EventArgs) Maneja linkTest.Click Allí está mi controlador de eventos ... y como dije cuando estaba en la computadora de mi casa y mi servidor web funcionaba correctamente. – Birk

+0

Vaya, pasé por alto el hecho de que estaba usando un LinkButton. Estaba pensando que era un control de botón, que no necesita el método __doPostBack(), si no recuerdo mal. Además, como AutoEventWireup es falso, no parece que ese método esté vinculado al control por sí mismo, pero alguien más ya mencionó que ... –

1

Tiene AutoEventWireup configurado en falso, pero no Anula de OnInit para adjuntar el evento. Intente cambiar el AutoEventWireup a verdadero.

Editar: A partir de la mayor información podría ser que está identificando incorrectamente Firefox en la sección de capacidades del navegador de su machine.config. (o web.config).

También podría ser que JavaScript esté desactivado en Firefox, y por lo tanto .NET está determinando que no tiene sentido renderizar el material de Javascript, y debe usar un enfoque diferente para el manejo de la devolución, si existe tal cosa.

+0

Sin cambios ... buena sugerencia, sin embargo. – Birk

1

Según la nueva información, creo que está claro que se trata de un problema de Firefox (quizás tenga un complemento de bloqueo JS), y no una cuestión de programación. Obtuve buenos resultados con tu código usando VS 2008 y FF3 en XP Pro, como era de esperar que casi todos los demás lo intenten.

puede intentar volver a instalar Firefox, asegúrese de que JS funciona en todos los otros sitios, asegúrese de localhost no tiene permisos de seguridad diferentes ...

2

Antes de reinstalar Firefox, ejecutarlo en modo de depuración (creo que es llamado modo de depuración). Desactiva todos los complementos y eso puede ayudarlo a reducirlo un poco. ¿Qué pasa con otros navegadores como Chrome o Safari?

+0

Descubrí el problema (y edité la pregunta) Era un plugin de suplantación de usuario-agente que he estado usando para probar. Aunque no estoy feliz de que ese fuera el problema. – Birk

+0

¡Al menos ha encontrado la respuesta! – Gromer

Cuestiones relacionadas