2009-05-20 27 views
6

Ich verwende ein verstecktes Feld 'Isjsenabled', um zu erkennen, ob das Javascript des Clients aktiviert oder deaktiviert ist. Wenn Javascript aktiviert ist, wird die JavaScript-Funktion ausgelöst und der Wert des ausgeblendeten Felds wird auf 1 gesetzt.Wie kann ich Javascript Funktion vor dem Laden der Seite ausführen?

Ich möchte den versteckten Wert von der Serverseite aus überprüfen. Page_load. Aber das Problem ist, dass Javascript nach dem Laden der Seite ausgelöst wird.

Haben Sie Vorschläge?

Html Teil

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

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

-Code Hinter Teil

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

Sie vergessen, dass Web ein Client/Server-Modell ist. Die Art, wie du dich dem näherst, ist unmöglich. Es ist ein einfacher Fall von Huhn und Ei, Wagen vor dem Pferd usw. Der aktualisierte Wert im versteckten Feld wird nicht verfügbar sein, bis das Formular zurückgeschickt wird. – x0n

+0

ha ha..ich vergesse nicht, was ich weiß. Ich möchte einen Vorschlag, um Javascript-Status von der Serverseite zu erhalten. Ich denke, es gibt einen Weg, den ich in diesem Moment nicht denken könnte. – miti737

Antwort

11

Ohne zu hart über die Richtung denken Sie in Kontakt treten können versuchen, gibt es eine wenig befahrene Tag, das von allen Browsern unterstützt wird NOSCRIPT genannt.

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

Wie Sie sehen können, ist die Idee, den Browser ein Bild anzufordern, aber nur wenn Javascript deaktiviert ist. Diese Seite könnte eine Sitzungsvariable festlegen, die besagt, dass der aktuelle Client keine Skriptfunktionalität besitzt, die für den gesamten Code in der aktuellen Sitzung verfügbar wäre.

Oder könnten Sie Ihre aktuelle Methodik folgen:

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

hoffe, das hilft,

-Oisin

+0

Danke für Ihre Antwort. Der HTML-Code, Eigentlich mag ich den Wert von Server-Seite zu bekommen. Wenn ich runat = "server" hinzufüge, können beide versteckten Felder abgerufen werden, wenn js aktiviert ist. Was schlägst du vor? – miti737

+2

Javascript läuft auf dem _client_ NACH der Seite auf dem _server_. Wie ich in einem Kommentar zu Ihrer ursprünglichen Frage erwähnt habe, ist es nicht möglich, was Sie zu tun versuchen. Um den * neuen * Wert des Feldes zu lesen, muss ein Postback auftreten. Es besteht keine wirkliche Verbindung zwischen dem Browser und der Seite. – x0n

+0

Danke Oisin für Ihre Hilfe und Anregung. Ich stimme dir zu. – miti737

1

Unobtrusive JavaScript kann von Interesse sein. Wenn Sie es Ihren Seiten erlauben, sich zu verschlechtern, vereinfacht dies die Entwicklung. Entwerfen Sie zunächst kein JavaScript und verbessern Sie die Erfahrung. Dies ist möglicherweise keine Option, wenn Ihre Anwendung extrem JavaScript-intensiv ist und unbedingt funktioniert. In diesem Fall wäre es eine gute Idee, das noscript-Tag zu verwenden, um Ihre Benutzer darüber zu informieren, dass JavaScript aktiviert sein muss.

Schauen Sie sich auch die Kommentare von x0n an. Hier ein Hinweis zum besseren Verständnis der HTTP request life cycle.

+0

Danke Daniel für deinen Vorschlag. "Unaufdringliches JavaScript" ist eine elegante Art, JavaScript zu verwalten. Danke für das Teilen. Eigentlich nach Projekt Anforderung muss ich Javascript des Browsers erkennen und irgendwo für weitere Aufgabe in Serverseite speichern. Deshalb suchte ich nach einer Lösung, die von mir übersehen werden könnte. – miti737

2

Javascript kann Cookies selbst setzen.

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

Kann Ihr Problem dadurch gelöst werden?

+0

Danke für Ihre Hilfe. Ich hatte das gleiche getan, so dass ich es nicht aus dem Code hinterlegen musste. Aber wenn jemand danach JavaScript aktiviert ... existiert der Cookie. Ich muss IJE = 0 von der Serverseite löschen/setzen. – miti737

+0

Sie können immer IJE = 0 serverseitig einstellen und dann IJE = 1 per Javascript setzen: –

3

Sie sollten Ihr Skript oder Noscript-Header als eine Seite auf sich selbst zeichnen, die dann leitet (entweder durch ein Meta-Tag oder durch ein Skript location.href) an den nächsten Ort, den Sie basierend auf gehen möchten, wenn Javascript aktiviert ist. Es dauert 2 Schritte, aber es wird Ihnen das Ergebnis bringen, das Sie suchen. Sie können die benötigten Informationen in der Abfrage der Weiterleitung an sich selbst weitergeben.

+0

Danke, Dredel. Eigentlich habe ich ein Raster mit einem 'Go' Button. Ich wollte die entsprechende js/nonjs-Seite mit dynamischem Querystring an der grid_ItemCommand-Methode umleiten. Deshalb musste ich den Browser-Status vom Code dahinter kennen. Nun scheint es mir, dass ich es irgendwie von Javascript umleiten muss, wie Sie – miti737

+0

daran erinnern, dass "Umleitung" kann eine Reihe von Möglichkeiten ohne Javascript erfolgen. Sie können ein verstecktes Formular festlegen, um "submit()" an den nächsten Ort zu senden. Wenn der Benutzer auf den "go" -Button drückt, können Sie den go-Button einen Link setzen (Parameter mit der Standortänderung übergeben) und Sie können das alte tun Meta-Weiterleitung beim Laden der Seite Wenn Sie mehr Details darüber anbieten, was genau Sie tun, kann ich Ihnen einen weniger allgemeinen Ratschlag geben :) –

Verwandte Themen