7
votes

Détection de la version .NET sans chaîne userAgent

Les navigateurs les plus modernes (Chrome 10, Firefox 4, IE9) raccourcissent tous leurs identifiants userAgent. En conséquence, les versions .NET pris en charge ne sont plus envoyées au serveur.

Afin de permettre à nos clients d'utiliser notre application ClickOnce, nous devons savoir quels cadres sont pris en charge par le client.

La détection JavaScript des aides ClickOnce Chrome et Firefox sont un début (ils échouent maintenant dans Firefox 4), mais nous n'avons plus de moyen de détecter si le client a .NET 2.0, 3.5 ou 4.0 installé.

En empêchant la détection de la plate-forme Windows de la chaîne userAgent et infère le cadre le plus probable (XP = 1.1, Vista = 2.0, Win7 = 3.5), comment détecter la prise en charge de la framework? < / p>

(Nous voulons empêcher le téléchargement du fichier .Application, car la plupart de nos clients ne semblent pas remarquer le téléchargement «Pop-Swers»)


0 commentaires

4 Réponses :


1
votes

Je ne vois pas un moyen de faire ça. Si le navigateur ne dit pas à votre serveur que les cadres sont installés, vous n'avez pas d'autre moyen de le savoir.


2 commentaires

N'est-il pas possible de créer un widget Silverlight qui détecte les frameworks installés et expose les résultats via JavaScript?


Cela suppose qu'ils ont installé Silverlight. Il y a beaucoup de façons que vous pourriez le détecter, mais aucun d'entre eux n'est infaillible, et tous ont divers scénarios de défaillance.



4
votes

navigator.useragent vous donne la chaîne UA étendue au moins sur IE9


3 commentaires

Ceci est dirigé dans la bonne direction: IE9, Chrome12 et FF3.6 émettent la chaîne .NET correctement via cette méthode. Malheureusement, FF4 ne le fait pas. Merci pour votre suggestion.


Dans notre observation, Navigator.useragent et UserAgent en-tête envoyés au serveur sont exactement les mêmes dans tous les modes de compatibilité de IE9. En mode IE9, la version .NET est manquante.


Je peux confirmer que dans IE9, console.log (navigator.useragent); renvoie toutes les versions-cadres. Testé sur jsfiddle.net.




1
votes

La façon dont j'ai eu le problème de ce problème consista à renvoyer un en-tête de réponse à raconter au navigateur de fonctionner dans la compatibilité, puis à détecter la version-cadre avec JavaScript sur le navigateur.useragent.

Code de page-derrière: P> xxx pré>

JavaScript sur la page P>

// js to detect .net 3.5
// if it evaluates to true, then the user has .NET 3.5 installed
alert(navigator.userAgent.search(/\.NET.*?3\.5[\.\da-z]*?;/i) > -1);


1 commentaires

Merci de votre contribution, mais notre problème principal est que les nouveaux navigateurs non-IE ne renvoient plus les versions .NET dans la chaîne userAgent plus.