ASP.net no genera javascript para algunos agentes de usuario
-
06-09-2019 - |
Pregunta
********************* ..Pero no me gustan las implicaciones.Anteriormente estuve probando nuestra aplicación móvil dirigida a iPhone y usando un complemento para enmascarar la cadena de agente de usuario de Firefox como un iPhone.
De hecho, .Net NO estaba generando el código requerido para las devoluciones de publicaciones basándose únicamente en esa información.
Sin embargo, no me gusta esto, porque dado que el iPhone y otros dispositivos multimedia pueden interpretar javascript, ASP.net está rompiendo cualquier aplicación que dependa de 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 genera JavaScript para navegadores específicos y cómo puedo desactivar esta "función"?
**************** Fin de edición 2 **************
Tengo un problema extraño.Copié un código de trabajo desde mi host remoto a mi computadora en el trabajo.Cuando intento usar la página me sale un error de javascript
__doPostBack is not defined
javascript:__doPostBack('ctl00$ContentPlaceHolder1$login','')()()
Cuando busco la fuente de la página de salida, efectivamente no hay javascript generado por el lado del servidor.
Intenté crear una página simple:
<%@ 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>
Código detrás:
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
Obteniendo el mismo error.
Intenté reiniciar (oye, funciona la mitad del tiempo), borré todo desde App_Code, global.asax y web.config, agregué un cuadro de texto con autopostback=true...Se me acabaron las ideas.
¿Alguien puede arrojar algo de luz sobre lo que está pasando aquí?
**************** Más información **************** ¡Acabo de intentarlo todo nuevamente en IE y funciona como se esperaba, muestra la fuente de la página:
<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>
Mientras que la fuente en Firefox solo muestra:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" />
Guardar las páginas web en el escritorio y abrirlas en el bloc de notas revela lo mismo...
Solución
El problema es la forma predeterminada en que ASP.net trata a los navegadores desconocidos...como el iPhone.Aunque sería bueno suponer que navegadores desconocidos podrían usar javascript...Puede especificar qué capacidades tiene un navegador en la sección web.config o machine.config.
Verificar http://slingfive.com/pages/code/browserCaps/ para obtener un archivo de configuración de browsercaps actualizado para asp.net
A continuación se muestra un ejemplo de un caso que coincide 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>
Otros consejos
Antes de reinstalar Firefox, ejecuta en modo de depuración (creo que se llama modo de depuración). Se apaga todos los plugins y que puede ayudar a reducir hacia abajo un poco. ¿Qué pasa con otros navegadores como Chrome o Safari?
Sobre la base de la nueva información, creo que es claro que este es un problema de Firefox (tal vez usted tiene un complemento en el bloqueo de JS), y no una cuestión de programación. Consigo buenos resultados con el código utilizando VS 2008 y FF3 en XP Pro, como yo esperaría lo más cualquier otra persona de intentarlo.
Es posible que vuelva a instalar Firefox, asegúrese de que JS funciona en todos los otros sitios, asegúrese de localhost no tiene permisos de seguridad diferentes ...
Has AutoEventWireup
se pone a falso, pero sin anulación de OnInit para unir el evento. Intente cambiar el AutoEventWireup
true.
Edit: Desde el más información que podría ser que es la identificación incorrecta de Firefox en la sección capacidades Brower de su machine.config. (O web.config).
También podría ser que JavaScript está desactivado en Firefox, y por lo tanto .NET es la determinación de que no hay punto de hacer que el material Javascript, y debería utilizar un enfoque diferente para la devolución de datos de manejo, si hay tal cosa.
¿Está seguro de haber instalado ASP.NET en el servidor web?
Parece que la función __doPostBack()
no se genera porque no tiene eventos del lado del servidor que lo requieran.
ASP.NET le gusta sólo para generar la función __doPostBack () cuando se tiene detectores de eventos suscritos que necesitaría para funcionar correctamente.