Обнаружение версии .NET без строки UserAgent

Большинство современных браузеров (Chrome 10, Firefox 4, IE9) сокращают свои идентификаторы UserAgent. В результате поддерживаемые версии .NET больше не отправляются на сервер.

Чтобы наши клиенты могли использовать наше приложение ClickOnce, нам необходимо знать, какие платформы поддерживаются клиентом.

Обнаружение Javascript помощников Chrome и Firefox ClickOnce - это начало (теперь они не работают в Firefox 4), но у нас больше нет способа определить, установлен ли у клиента .NET 2.0, 3.5 или 4.0.

Если мы не можем определить платформу Windows по строке UserAgent и вывести наиболее вероятную платформу (XP = 1.1, Vista = 2.0, Win7 = 3.5), как мы можем обнаружить поддержку .NET framework?

(Мы хотим предотвратить загрузку файла .application, поскольку большинство наших клиентов не замечают всплывающих окон загрузки)


person Jaspio    schedule 12.04.2011    source источник


Ответы (4)


Эта проблема была исправлено Microsoft. Версия .NET теперь возвращается в виде заголовка HTTP-запроса «X-ClickOnceSupport».

В PHP вы получите это через getenv ()

print getenv('HTTP_X_CLICKONCESUPPORT');

В Perl

print $ENV{HTTP_X_CLICKONCESUPPORT};

В JavaScript это невозможно, согласно это ответ.

(Все это началось с изучения кода Firefox .NET Assistant, что привело меня к поиску заголовка «X-ClickOnceSupport». Ничего подобного возможности просмотреть исходный код, чтобы разгадать загадку!)

person Stan James    schedule 26.09.2011
comment
Это верно для плагина Firefox .NET Framework Assistant, но не для IE 9 и IE 10. - person Kosta; 05.02.2013

navigator.userAgent дает вам расширенную строку UA, по крайней мере, в IE9

person wac    schedule 18.04.2011
comment
Это идет в правильном направлении: IE9, Chrome12 и FF3.6 правильно генерируют строку .NET с помощью этого метода. К сожалению, FF4 этого не делает. Спасибо за ваше предложение. - person Jaspio; 19.04.2011
comment
По нашим наблюдениям, заголовки navigator.userAgent и UserAgent, отправляемые на сервер, абсолютно одинаковы во всех режимах совместимости IE9. В режиме IE9 версия .NET отсутствует. - person dkl; 02.11.2011
comment
Могу подтвердить, что в IE9 console.log(navigator.userAgent); возвращает все версии фреймворка. Проверено на jsfiddle.net. - person tbolon; 21.09.2012

Я не вижу способа сделать это. Если браузер не сообщает вашему серверу, какие фреймворки установлены, у вас нет другого способа узнать.

person Andy Johnson    schedule 12.04.2011
comment
Невозможно создать виджет Silverlight, который обнаруживает установленные фреймворки и предоставляет результаты через javascript? - person Jaspio; 13.04.2011
comment
Это предполагает, что у них установлен Silverlight. Есть много способов обнаружить это, но ни один из них не является надежным, и все они имеют различные сценарии сбоя. - person Erik Funkenbusch; 18.04.2011

Я решил решить эту проблему, отправив обратно заголовок ответа, сообщающий браузеру, что он должен работать в режиме совместимости, а затем определить версию фреймворка с помощью javascript в navigator.userAgent.

Код программной части страницы:

Response.Headers.Add("X-UA-Compatible", "IE=7");

Javascript на странице

// 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);
person AcesAndNates    schedule 01.11.2011
comment
Спасибо за ваш вклад, но наша основная проблема в том, что новые браузеры, отличные от IE, больше не возвращают версии .NET в строке userAgent. - person Jaspio; 03.11.2011