2009-05-20 23 views
6

Sto utilizzando un campo nascosto 'Isjsenabled' per rilevare se Javascript del client è abilitato o disabilitato. Se Javascript è abilitato, la funzione Javascript verrà attivata e imposterà il valore del campo nascosto su 1.Come posso eseguire la funzione Javascript prima del caricamento della pagina?

Voglio controllare il valore nascosto dal lato server Page_load. Ma il problema è che Javascript viene attivato dopo il caricamento della pagina.

Avete qualche suggerimento?

Parte Html

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

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

Codice Dietro 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

Si sta dimenticando che il web è un modello client/server. Il modo in cui ti stai avvicinando a questo è impossibile. È un semplice caso di pollo e uovo, carrello prima del cavallo, ecc. Il valore aggiornato nel campo nascosto non sarà disponibile fino a quando il modulo non sarà pubblicato. – x0n

+0

ha ha..non sto dimenticando quello che so. Voglio qualche suggerimento per ottenere lo stato di javascript da serverside. Penso che ci sia un modo in cui non potrei pensare in questo momento. – miti737

risposta

11

Senza pensare troppo circa la direzione che stai cercando di entrare, c'è un piccolo tag utilizzato che è supportato da tutti i browser chiamato NOSCRIPT.

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

Come si vede, l'idea è di fare in modo che il browser richieda un'immagine ma solo se javascript è disabilitato. Questa pagina può impostare una variabile di sessione in cui si afferma che il client corrente non ha capacità di script che sarebbero disponibili per tutto il codice nella sessione corrente.

Oppure, si potrebbe seguire la vostra attuale metodologia:

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

Spero che questo aiuti,

-Oisin

+0

Grazie per la risposta. il codice HTML che rendrered dopo aver utilizzato il 2 ° opzione In realtà io voglio ottenere il valore dal lato server. Se aggiungo runat = "server", entrambi i campi nascosti possono essere recuperati se js è abilitato. Che cosa suggerisci? – miti737

+2

javascript viene eseguito su _client_ DOPO la pagina sul _server_. Come ho detto in un commento sulla tua domanda iniziale, ciò che stai cercando di fare non è possibile. Per leggere il * nuovo * valore del campo, deve esserci un postback. Non c'è davvero una connessione tra il browser e la pagina. – x0n

+0

Grazie Oisin per il tuo aiuto e il tuo suggerimento. Sono d'accordo con te. – miti737

1

Unobtrusive JavaScript possono essere di interesse. Permettere alle tue pagine di degradarsi con grazia semplificherà lo sviluppo. Progettare inizialmente senza JavaScript e migliorare l'esperienza. Questo potrebbe non essere un'opzione se la tua applicazione è estremamente intensiva di JavaScript e richiede assolutamente che funzioni. In tal caso, l'utilizzo del tag noscript per informare i tuoi utenti che hanno bisogno del JavaScript abilitato sarebbe una buona idea.

Inoltre, guarda i commenti di x0n. Ecco un riferimento per aiutare a capire il HTTP request life cycle.

+0

Grazie Daniel per il tuo suggerimento. 'JavaScript discreto' è un modo elegante per gestire javascript. Grazie per la condivisione. In realtà, in base ai requisiti del progetto, devo rilevare il Javascript del browser e salvarlo da qualche parte per ulteriori attività sul lato server. Ecco perché stavo cercando una soluzione che potrebbe essere trascurata da me. – miti737

2

javascript può impostare cookie da solo.

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

Questo risolve il problema?

+0

Grazie per il vostro aiuto. Avevo fatto la stessa cosa per non aver bisogno di settarlo dal codice. Ma se qualcuno abilita javascript dopo che ... il cookie esiste. Devo cancellare/impostare IJE = 0 dal lato server. – miti737

+0

È sempre possibile impostare IJE = 0 dal lato server, quindi impostare IJE = 1 in javascript :) –

3

si dovrebbe disegnare l'intestazione di script o noscript come una pagina su se stessa che quindi reindirizza (tramite un meta tag o attraverso uno script location.href) al successivo posto in cui si desidera andare in base se è attivato javascript. Ci vorranno 2 passi, ma otterrai il risultato che stai cercando. Puoi passare le informazioni di cui hai bisogno a te stesso nella query del reindirizzamento.

+0

Grazie Dredel. In realtà ho una griglia con un pulsante 'Vai'. Volevo reindirizzare la corrispondente pagina js/nonjs con querystring dinamico al metodo grid_ItemCommand. Ecco perché avevo bisogno di conoscere lo stato del browser dal codice sottostante. Ora mi sembra che devo reindirizzare in qualche modo da javascript come hai suggerito – miti737

+0

tieni presente che il "reindirizzamento" può essere fatto in due modi senza javascript. È possibile impostare un modulo nascosto su "submit()" nella posizione successiva, quando l'utente preme il pulsante "go", è possibile fare il pulsante go un link (passando i parametri insieme al cambio di posizione) e si può fare il vecchio Meta reindirizza mentre la pagina si sta caricando. Se offri maggiori dettagli su cosa stai facendo esattamente, posso darti un consiglio meno generalizzato :) –

Problemi correlati