none
Silverlight или aspx RRS feed

  • Вопрос

  • Всем здравствуйте!

    Сразу к сути: Разработал сайт (веб приложение) полностью на Silverlight. Во время демонстрации заказчику, он изъявил следующее желание:

    До показа какой либо информации пользователю, должна происходить проверка на наличие установленного Silverlight, и в случае если он установлен, мы открываем пользователю Silverlight версию сайта которую я сделал, в противном случае, мы показываем пользователю aspx сайт и проверяем возможность установки Silverlight. Если установка возможна мы размещаем на этом сайте банерок или кнопку, кликнув по которой, пользователь установит Silverlight и сможет перейти на соответствующую версию сайта, в противном случае ничего не делаем.

    Проблем несколько, по порядку:

    1. Как проверить установлен ли Silverlight исходя их "хотелок" заказчика.

    2. Как быть с моим уже готовым проектом (служба доступа к данным WCF с поддержкой Silverlight, масса классов с логикой приложения которые хотелось бы использовать в новом, aspx приложении) хотелось бы просто добавить несколько aspx страниц, и использовать все созданные классы и имеющуюся службу WCF. Т.е. не переделывать проект, а надстроить его функционалом aspx.

    3. Как проверить возможна ли установка Silverlight? Как я полагаю проверка сводится к проверке установленной ОС.

    4. Из тех же "хотелок", заказчик просит сделать функцию отключения пароля с сохранением безопасности. Какие способы реализации данного вопроса существуют? (Привязка к установленному железу, браузеру, ОС, серийному номеру)

    Спасибо за внимание к моей проблеме.


    • Изменено JusteG 20 сентября 2012 г. 6:38
    20 сентября 2012 г. 6:32

Ответы

  • По первому вопросу вам должна помочь следующая проверка - Determining if Silverlight is installed using Javascript, далее тем же javascript делаете редирект на нужную версию сайта. Проверка возможности установки silverlight скорей всего тоже производиться будет с помощью js через определения версии браузера и ОС, а потом проверки их на совместимость с Silverligh (тут самим скорей всего придется задать параметры)

    Для связи [mail]

    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    20 сентября 2012 г. 11:36
    Модератор
  • 3. Проверить ОС из юзер агента что отдает браузер пользователя при заходе на вашу страницу. Пример в интернете достаточно - для ASP.NET - HttpRequest.UserAgent Property

    4. Есть же куки, по ним можно идентифицировать пользователя, сохраняются в браузере с которого заходил юзер.


    Для связи [mail]

    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    21 сентября 2012 г. 8:29
    Модератор
  • Abolmasov Dmitry

    Спасибо еще раз за предоставленную информацию.

    Теперь о проделанной работе:

    п. 1 Решил внедрением в страницу Default.aspx проекта Silverlight - кода JavaScript

    <script type="text/javascript">
            function isSilverlightInstalled() {
                var isSilverlightInstalled = false;
    
                try {
                    //check on IE
                    try {
                        var slControl = new ActiveXObject('AgControl.AgControl');
                        isSilverlightInstalled = true;
                    }
                    catch (e) {
                        //either not installed or not IE. Check Firefox
                        if (navigator.plugins["Silverlight Plug-In"]) {
                            isSilverlightInstalled = true;
                        }
                    }
                }
                catch (e) {
                    //we don't want to leak exceptions. However, you may want
                    //to add exception tracking code here.
                }
    
                if (isSilverlightInstalled == false) {
                    document.location.href = 'http://192.168.15.24:81/Login.aspx';
                }
            }
        </script>

    Правда вызываю его на мой взгляд коряво, вот вставка в body страницы:

    <div id="LookingForSilverlight">
       <script type="text/javascript">
          isSilverlightInstalled();
       </script>
    </div>

    Само тело скрипта первой строчкой в head, вот вся станица, если кто может ровнее написать, или исправить что то, ну или наконец опровергнуть мои сомнения, и подтвердить что я все сделал правильно, буду признателен. Просто с JavaScript работал впервые. Тем не менее все работает.

    п. 2 Решил выносом всех методов в отдельную dll, созданную новым проектом в этом же решении, и добавлением еще одного проекта в решение - сайта ASP.NET. Пришлось перебить все связи в Silverlight приложении, но зато теперь одни и те же методы используются как сайтом на ASP.NET, так и приложением на Silverlight. Чего я собстно и добивался.

    Остались нерешенными пункты 3 и 4.

    Все ответы отмечу после решения вопроса целиком, иначе не будет внимания к решенной теме.




    • Изменено JusteG 21 сентября 2012 г. 8:11
    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    21 сентября 2012 г. 8:07
  • п. 3 "А ларчик просто открывался" Request.Browser.Platform;

    п. 4 Если реализовывать через куки то все просто тыц и тыц. Хотелось то по хитрому, с привязкой скажем к серийнику ЦП или системного винта...

    Вопрос в целом решен, всем спасибо.

    2 небольших штришка: 1 касательно привязки к железу, возможно ли это? Или не заморачиваться. И второй касательно все ли я сделал правильно в файле Default.aspx.





    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    • Изменено JusteG 21 сентября 2012 г. 9:10
    21 сентября 2012 г. 9:07

Все ответы

  • По первому вопросу вам должна помочь следующая проверка - Determining if Silverlight is installed using Javascript, далее тем же javascript делаете редирект на нужную версию сайта. Проверка возможности установки silverlight скорей всего тоже производиться будет с помощью js через определения версии браузера и ОС, а потом проверки их на совместимость с Silverligh (тут самим скорей всего придется задать параметры)

    Для связи [mail]

    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    20 сентября 2012 г. 11:36
    Модератор
  • Я могу путать, а проверить лениво (отключать SL, потом опять включать), но вроде вот такой хак работал:

    1. Вы когда создавали проект SL, вам предложили создать тестовый Web проект.

    2. В нем открываете html или aspx файл

    3. Находите вот такой элемент:

    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
     			  <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
    		  </a>
    5. Заменяете его на то, что должно показываться пользователю если не установлен SL.
    20 сентября 2012 г. 12:55
    Отвечающий
  • Спасибо, ознакомился с информацией по ссылке. Пока что вопрос открыт, возможно использую именно этот вариант. Так или иначе я отпишусь.
    21 сентября 2012 г. 0:41
  • Спасибо, отпишусь как проверю ваш вариант.
    21 сентября 2012 г. 0:44
  • А как с пунктом 2? Есть соображения?
    21 сентября 2012 г. 0:49
  • Abolmasov Dmitry

    Спасибо еще раз за предоставленную информацию.

    Теперь о проделанной работе:

    п. 1 Решил внедрением в страницу Default.aspx проекта Silverlight - кода JavaScript

    <script type="text/javascript">
            function isSilverlightInstalled() {
                var isSilverlightInstalled = false;
    
                try {
                    //check on IE
                    try {
                        var slControl = new ActiveXObject('AgControl.AgControl');
                        isSilverlightInstalled = true;
                    }
                    catch (e) {
                        //either not installed or not IE. Check Firefox
                        if (navigator.plugins["Silverlight Plug-In"]) {
                            isSilverlightInstalled = true;
                        }
                    }
                }
                catch (e) {
                    //we don't want to leak exceptions. However, you may want
                    //to add exception tracking code here.
                }
    
                if (isSilverlightInstalled == false) {
                    document.location.href = 'http://192.168.15.24:81/Login.aspx';
                }
            }
        </script>

    Правда вызываю его на мой взгляд коряво, вот вставка в body страницы:

    <div id="LookingForSilverlight">
       <script type="text/javascript">
          isSilverlightInstalled();
       </script>
    </div>

    Само тело скрипта первой строчкой в head, вот вся станица, если кто может ровнее написать, или исправить что то, ну или наконец опровергнуть мои сомнения, и подтвердить что я все сделал правильно, буду признателен. Просто с JavaScript работал впервые. Тем не менее все работает.

    п. 2 Решил выносом всех методов в отдельную dll, созданную новым проектом в этом же решении, и добавлением еще одного проекта в решение - сайта ASP.NET. Пришлось перебить все связи в Silverlight приложении, но зато теперь одни и те же методы используются как сайтом на ASP.NET, так и приложением на Silverlight. Чего я собстно и добивался.

    Остались нерешенными пункты 3 и 4.

    Все ответы отмечу после решения вопроса целиком, иначе не будет внимания к решенной теме.




    • Изменено JusteG 21 сентября 2012 г. 8:11
    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    21 сентября 2012 г. 8:07
  • 3. Проверить ОС из юзер агента что отдает браузер пользователя при заходе на вашу страницу. Пример в интернете достаточно - для ASP.NET - HttpRequest.UserAgent Property

    4. Есть же куки, по ним можно идентифицировать пользователя, сохраняются в браузере с которого заходил юзер.


    Для связи [mail]

    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    21 сентября 2012 г. 8:29
    Модератор
  • п. 3 "А ларчик просто открывался" Request.Browser.Platform;

    п. 4 Если реализовывать через куки то все просто тыц и тыц. Хотелось то по хитрому, с привязкой скажем к серийнику ЦП или системного винта...

    Вопрос в целом решен, всем спасибо.

    2 небольших штришка: 1 касательно привязки к железу, возможно ли это? Или не заморачиваться. И второй касательно все ли я сделал правильно в файле Default.aspx.





    • Помечено в качестве ответа JusteG 21 сентября 2012 г. 9:08
    • Изменено JusteG 21 сентября 2012 г. 9:10
    21 сентября 2012 г. 9:07
  • С клиентской стороны информацию о железе помоему не удастся получить без стороннего плагина (обычно данное реализуют на java, возожно есть решение для silverlight), но чистым html/js - скорей всего нет.

    Для связи [mail]

    21 сентября 2012 г. 9:54
    Модератор
  • С клиентской стороны информацию о железе помоему не удастся получить без стороннего плагина (обычно данное реализуют на java, возожно есть решение для silverlight), но чистым html/js - скорей всего нет.

    Для связи [mail]


    Угу, придется писать ActiveX контрол и взаимодействовать с ним из js.
    21 сентября 2012 г. 10:22
    Отвечающий
  • Спасибо за указанное направление. Может и займусь как нибудь. Пока что будут куки.

    Гляньте Default.aspx пожалуйста, не то я как слепой котенок, накопипастил там чего то, а правильно неправильно - не знаю, с js не знаком, и ради одной функции разбираться с ним... Ну вы понимаете. Грёбаное чувство что я что то сделал неправильно, не рационально и криво не даст мне уснуть =)


    • Изменено JusteG 21 сентября 2012 г. 11:42
    21 сентября 2012 г. 11:39
  • Вроде нормальный код, если будут возникать проблемы - тогда создавайте новый вопрос, но не должны они быть

    Для связи [mail]

    24 сентября 2012 г. 10:56
    Модератор