2009-05-20 24 views
6

Estoy usando un campo oculto 'Isjsenabled' para detectar si JavaScript del cliente está habilitado o deshabilitado. Si Javascript está habilitado, la función de Javascript se activará y establecerá el valor del campo oculto en 1.¿Cómo puedo ejecutar la función Javascript antes de cargar la página?

Quiero verificar el valor oculto del lado del servidor Page_load. Pero el problema es que JavaScript se dispara después de la carga de la página.

¿Tiene alguna sugerencia?

HTML Parte

<script type="text/javascript"> 
    $(function() { 
     $("#<%= Isjsenabled.ClientID %>").val(1); 
    }); 
</script> 

<input id="Isjsenabled" runat="server" value ="0" type="hidden" /> 

código subyacente de la Parte

protected void Page_Load(object sender, EventArgs e) {     
    HtmlInputHidden hdn = this.FindControl("Isjsenabled") as HtmlInputHidden; 
     if (hdn != null) 
      if (hdn.Value != null && hdn.Value == "0") 
       Helper.SetCookie("IJE", "0"); 
      else 
       Helper.SetCookie("IJE", "1"); 
} 
+2

Olvidas que la web es un modelo cliente/servidor. La forma en que te estás acercando a esto es imposible. Es un caso simple de pollo y huevo, carro delante del caballo, etc. El valor actualizado en el campo oculto no estará disponible hasta que se registre el formulario. – x0n

+0

ja, ja ... No me olvido de lo que sé. Quiero alguna sugerencia para obtener el estado de javascript desde el servidor. Creo que hay alguna manera que no podría pensar en este momento. – miti737

Respuesta

11

Sin pensar demasiado acerca de la dirección que está tratando de entrar, hay una pequeña etiqueta usada que es soportado por todos los navegadores llamado NOSCRIPT.

<noscript> 
<img src="http://myserver/notify_no_script.aspx" style="display:none"> 
</noscript> 

Como puede ver, la idea es hacer que el navegador solicite una imagen, pero solo si javascript está deshabilitado. Esta página podría establecer una variable de sesión que indique que el cliente actual no tiene capacidad de script que esté disponible para todos los códigos en la sesión actual.

O bien, puede seguir su metodología actual:

<noscript> 
<input type="hidden" name="noscript" value="1"> 
</noscript> 
<script><!-- 
document.writeline('<input type="hidden" name="noscript" value="0">'); 
//--></script> 

Espero que esto ayude,

-Oisin

+0

Gracias por su respuesta. el código HTML que rendrered después de usar su segunda opción En realidad Quiero obtener el valor del lado del servidor. Si agrego runat = "server", ambos campos ocultos pueden ser recuperados si js habilitado. ¿Qué sugieres? – miti737

+2

javascript se ejecuta en _client_ DESPUÉS de la página en _server_. Como mencioné en un comentario sobre su pregunta original, lo que está tratando de hacer no es posible. Para leer el * nuevo * valor del campo, debe realizarse una devolución de datos. Realmente no hay una conexión entre el navegador y la página. – x0n

+0

Gracias Oisin por su ayuda y sugerencia. Estoy de acuerdo contigo. – miti737

1

Unobtrusive JavaScript pueden ser de interés. Permitir que sus páginas se degraden con elegancia simplificará el desarrollo. Diseña sin JavaScript inicialmente y mejora la experiencia. Esto puede no ser una opción si su aplicación es extremadamente intensiva en JavaScript y absolutamente requiere que funcione. En ese caso, usar la etiqueta noscript para informar a los usuarios que necesitan habilitar JavaScript sería una buena idea.

Además, consulte los comentarios de x0n. Aquí una referencia para ayudar a comprender el HTTP request life cycle.

+0

Gracias Daniel por su sugerencia. 'JavaScript discreto' es una forma elegante de administrar javascript. Gracias por compartir. Actualmente, de acuerdo con los requisitos del proyecto, necesito detectar el Javascript del navegador y guardarlo en alguna parte para realizar más tareas en el lado del servidor. Es por eso que estaba buscando una solución que yo pueda pasar por alto. – miti737

2

javascript puede establecer cookies por sí mismo.

var myDate = new Date() 
document.cookie = 'IJE=1; expires=' + myDate.toGMTString() 

¿Esto resuelve su problema?

+0

Gracias por su ayuda. Hice lo mismo, así que no necesito configurarlo desde el código. Pero si alguien habilita javascript después de eso ... la cookie existe. Tengo que eliminar/configurar IJE = 0 del lado del servidor. – miti737

+0

Siempre puede establecer IJE = 0 desde el lado del servidor, y luego establecer IJE = 1 por javascript :) –

3

debe dibujar su secuencia de comandos o encabezado noscript como una página en sí mismo que luego redirige (ya sea a través de una metaetiqueta o mediante una ubicación de secuencia de comandos.href) al siguiente lugar que desee en función de si javascript está activado. Te tomará 2 pasos, pero te dará el resultado que estás buscando. Puede pasar la información que necesita a usted mismo en la consulta de la redirección.

+0

Gracias Dredel. En realidad, tengo una cuadrícula con un botón 'Ir'. Quería redirigir la página js/nonjs correspondiente con la querystring dinámica en el método grid_ItemCommand. Por eso necesitaba saber el estado del navegador desde el código subyacente. Ahora me parece que tengo que redirigirlo de alguna manera desde javascript como sugirió – miti737

+0

tenga en cuenta que la "redirección" se puede hacer de varias maneras sin javascript. Puede establecer un formulario oculto para "enviar()" a la siguiente ubicación, cuando el usuario presiona su botón "ir", puede hacer que el botón de ir sea un enlace (pasando los parametros junto con el cambio de ubicación) y puede hacer el viejo Meta redirigir a medida que la página se carga. Si ofrece más detalles sobre lo que está haciendo exactamente, puedo darle un consejo menos generalizado :) –

Cuestiones relacionadas