2009-06-04 7 views
9

Est-il possible de vérifier si le navigateur client a javascript activé à partir du code ASP.NET?Vérifier si Javascript est activé côté serveur ASP.NET

J'espérais idéalement faire cela sur PreRender de contrôles, ou PageLoad, afin que je puisse changer leur apparence.

Toutes les suggestions, les solutions de contournement, etc. seraient grandement appréciées.

Répondre

7

Vous ne pouvez pas le faire, sans faire une demande ultérieure, j'ai peur.

Il y a des explications qui peuvent être trouvées en faisant une recherche sur Google utilisent le plus souvent un appel AJAX ou un champ caché qui est poplué via un certain javascript, qui ne sera pas exécuté si Javascript est désactivé.

Si vous devez le faire alors j'essaierais de le faire dès la première requête du client, et enregistrer un cookie (ou quelque chose de similaire), puis vérifier la valeur du cookie sur les requêtes suivantes. Cela suppose que l'utilisateur n'activera/désactivera pas Javascript souvent. Vous pouvez également stocker une valeur dans la session.

J'espère que cela

+0

J'espérais quelque chose plus propre, mais si c'est la seule façon qui peut être fait ... Je vais le stocker dans une session var et avoir une méthode accesseur pour le rendre plus propre. – Fermin

7

Page.Request.Browser.EcmaScriptVersion indiquera ce ASP.NET pense est vrai. Cela suppose que les BrowserCaps sont corrects. Il vous donne une indication de premier passage qui est probablement assez proche.

EDIT: J'ai d'abord mal compris la question (activé contre supporté). Vous pouvez utiliser le côté serveur BrowserCaps pour éliminer les UserAgents qui ne prennent pas en charge le code JavaScript. Ensuite, utilisez une ligne de script sur chaque requête afin de déterminer si elle est activée par cookie:

// let the server know JavaScript is enabled via session cookie 
document.cookie = "js=1; path=/"; 

détectera alors côté serveur existence:

HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("js"); 
bool js = (cookie != null) && (cookie.Value == "1"); 

Une fois qu'ils ferment le navigateur ce cookie disparaîtra.

Questions connexes