2010-02-05 4 views
2

Comment vérifier si le navigateur supporte javascript?rediriger vers une page si le navigateur ne supporte pas javascript dans asp.net MVC

Je dois rediriger les utilisateurs vers une page de notification, si le navigateur de l'utilisateur ne prend pas en charge le javascript. Comment puis-je faire cela dans mon application asp.net mvc (C#)?

Quel est le meilleur moyen de gérer cela dans asp.net mvc?

Le html i testé:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <title>Stack Overflow</title> 
    <link rel="stylesheet" href="http://sstatic.net/so/all.css?v=6230"> 
</head> 
<body> 
    <noscript> 
     <div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"></div> 
    </noscript>   
</body> 
</html> 

Répondre

5

Wow à tous les -1. Euh, eh bien ... il peut ne pas être valide, mais le meta -in- noscript hack (comme tout le monde est déjà posté et a été rejeté pour) vraiment est la seule façon de faire ce que vous voulez. Mais:

J'ai besoin de rediriger les utilisateurs vers une page notification, si le navigateur de l'utilisateur ne supporte pas JavaScript

Je pense que ce que vous voulez est pas ce que vous besoin.La redirection No-JS est horrible pour la convivialité/accessibilité. S'il vous plaît ne faites pas ça.

Envisager une approche comme celle qui est si à la place: garder l'utilisateur sur la même page, mais il suffit d'inclure un sur la page notification script est indisponible:

<noscript> 
    <div id="noscript-warning">Stack Overflow works best with JavaScript enabled</div> 
</noscript> 

Vous pouvez utiliser les CSS pour faire de ce grand et rouge et apparaître au-dessus de l'ensemble du reste de la page si vous devez.

Vous pouvez également être plus précis. Souvent, vous avez besoin non seulement de JavaScript, mais aussi de certaines fonctionnalités de script qui ne sont pas disponibles partout. Par exemple, IEMobile (pré-8) a JavaScript, mais a un support de DOM qui vous empêche d'exécuter la plupart des scripts modernes. Ou vous pourriez compter sur des interfaces liées au HTML5 qui ne sont pas encore partout. Dans ce cas, vous pouvez renifler côté client et définir manuellement la visibilité de la notification:

<head> 
    <style type="text/javascript"> 
     #scriptwarning { 
      position: absolute; z-index: 9; 
      top: 25%; left: 25%; width:50%; height: 50%; 
      color: red; background: white; 
      border: dashed red 1px; 
     } 
     body.jsok #scriptwarning { display: none; } 
    </style> 
</head><body> 
    <script type="text/javascript"> 
     // Sniff capabilities in whatever way is necessary 
     // 
     if ('featureWeWantToUse' in window) { 
      document.body.className= 'jsok'; 
     } 
    </script> 
    <div id="scriptwarning"> 
     JavaScript is disabled, or too rubbish on your browser to do what we want. 
     See the <a href="browsersupport.html">supported browsers</a> page for more information. 
    </div> 
</body> 
+0

C'est probablement la meilleure réponse, même si elle ne fait pas ce que l'OP veut. –

+0

Comment SO afficher/masquer l'alerte? je vois juste un div (

) quand je regarde la source de vue. – Prasad

+1

Ouais: c'est tout ce qu'il y a. L'élément '

0

Mettez un meta refresh dans une balise noscript.

+0

L'élément noscript n'est pas autorisé à contenir des méta-éléments. – Quentin

0

Je ne suis pas sûr de savoir comment vous souhaitez rediriger, mais vous pouvez utiliser la balise <meta> pour rediriger vers une autre page: <meta http-equiv="refresh" content="2;URL=page.aspx" />

L'URL peut être créé par le <% = Url.Action (.. .)%>

+0

En général, meta refresh est le pire moyen d'émettre une redirection ... et cela ne répond pas au point principal de la question - détecter un manque de JavaScript. – Quentin

+0

@david, je suis vraiment intéressé pourquoi vous pensez que meta-refresh est le pire moyen de rediriger – MysticEarth

+0

Il se produit après tout autre moyen que vous pourriez rediriger, c'est donc la manière la plus lente, et il casse le bouton de retour. – Quentin

3

Il n'y a aucun moyen de le détecter côté serveur, je ne connais pas de navigateur qui communique son statut de support javascript au serveur dans les en-têtes qu'il envoie. Vous devriez être en mesure d'utiliser un meta refresh dans une balise noscript si:

<noscript> 
    <meta http-equiv="refresh" content="0; URL=no_javascript.asp"> 
</noscript> 

Comme alternative, je recommande de faire ce qui ne SO - afficher une grande bannière rouge en haut de la page en disant que JavaScript est requis ou rend la page fonctionne mieux.

<noscript> 
    <div id="noscript">Enable JavaScript to get the most out of this site!</div> 
<noscript> 
+0

L'élément noscript n'est pas autorisé à contenir des méta-éléments. – Quentin

+0

@David Dorward: Pourtant, il fonctionne dans Firefox & IE ... qui dit que ce n'est pas autorisé? –

+0

@Andy ça marche, mais selon la DTD du W3C, il n'est pas permis de placer une méta-balise dans la balise noscript – MysticEarth

-3

Une approche très hacky serait:

  1. Initie un cookie à l'aide de JavaScript

  2. Utilisez un meta refresh pour rediriger (ce qui est la pire façon possible de rediriger, mais le un seul qui apparaîtra après que JS soit exécuté si JS est disponible et fonctionne quand JS n'est pas disponible)

  3. Vérifiez la présence du cookie sur t La page est redirigée vers et émet un 302 soit à un présent JS, soit à une page JS non présente.

Ceci échoue si les cookies ou JavaScript désactivé ou non pris en charge étaient bien.

Si vous revenez en arrière et essayez de résoudre le problème "Certains utilisateurs n'ont pas JS" correctement (plutôt que d'aller directement à "Essayer de détecter les utilisateurs sans JS"), utilisez l'amélioration progressive et suivez rule 2.

+0

Pourquoi une approche hacky est-elle préférable à l'utilisation d'un meta refresh dans une balise noscript, une approche qui fonctionne? –

+1

Outre les problèmes de cookies nécessitant/et/JS, cela nécessite deux redirections. –

+2

Je pense que ce n'est pas seulement hacky, mais aussi un peu merdique. Parce qu'avec cette approche, vous ne savez pas si les utilisateurs ont désactivé les cookies OU javascript. – MysticEarth

0

Il est très facile de tourner cela sur sa tête. Commencez sur la page qui est là pour les personnes qui n'ont pas de JavaScript, puis utilisez JavaScript pour rediriger vers la version qui nécessite JavaScript.

<script type="text/javascript"> 
    document.location = "JSVersion.html"; 
</script> 
2

Vous pouvez également utiliser la balise noscript pour cacher le contenu de la page et affiche un avertissement que la page requires javascript. Vous pouvez faire quelque chose comme ceci:

<noscript> 
    <style> 
    #id_of_content_to_hide { display:none; } 
    </style> 
    <p> 
    This page requires javascript. 
    </p> 
</noscript> 
Questions connexes