2009-07-28 2 views
6

Сначала несколько определений, чтобы все было ясно.Управление WebBrowser как пользовательский интерфейс

Пользователь: Живой человек, с помощью программного обеспечения

Клиента: компания, которая платит за настроенную версию нашего программного обеспечения для своих пользователей.

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

Моя цель состоит в том, чтобы переключиться на один универсальный клиент, который может быть настроен динамически на основе того, кто входит в систему. Поскольку наше программное обеспечение требует интернет-соединения в любом случае (широко использует веб-службы), я рассматривал только использование элемента управления WebBrowser в .NET. и позволяет ему взаимодействовать (через ObjectForScripting) с необходимым оборудованием на компьютере.

Затем весь пользовательский интерфейс написан в формате HTML/JavaScript и хранится на сервере, что делает распространение и обслуживание новых пользовательских интерфейсов тривиальным. Общий клиент - это немного больше, чем пользовательский веб-браузер, который знает, как разговаривать с нашими аппаратными устройствами и может быть сказано сделать это через javascript.

Я вижу много преимуществ для этого подхода и не слишком много недостатков. Что мне не хватает? Почему я не должен идти в этом направлении?

ответ

5

Есть некоторые коммерческие приложения, которые успешно используют этот подход. Ниже приводятся некоторые соображения, которые следует учитывать. В любом случае это не должно мешать вам пытаться подходить к подходу. Однако ключевым вопросом, который вы зададите себе, является то, может ли приложение быть родным веб-приложением.

  • Управление веб-браузером «ест вкладки». Вы можете использовать клавишу табуляции, чтобы переместить фокус ввода в элемент управления браузера из приложения-хостинга, но вы не можете вывести его из него (если вы не указали это явно)

  • Приложения HTML/Javascript однопоточные. Если вам нужна какая-либо фоновая обработка, вам может потребоваться делегировать эту задачу хостинговому приложению.

  • Если в блоке управления веб-браузером возникли ошибки, они рассматриваются как ошибки сценария и содержатся внутри элемента управления. Сдерживание - это хорошо. Но вы даже не можете понять, что при построении/отладке произошло условие ошибки.

  • Если нет подключения к сети, пользователи могут увидеть страницу сбоя браузера. Вы не можете упредить это и показать свое собственное сообщение.

  • В зависимости от вашего приложения и того, как оно реализовано, навигация может показаться более медлительной, чем обычно в настольных приложениях. Страница перезагружается, в частности. Тщательное использование асинхронного AJAX может помочь облегчить некоторые или все это.

  • Ваши пользователи будут знать, что они работают с веб-страницей. Дизайн пользовательского интерфейса сам по себе не сможет скрыть этот факт. Ответственность и случайный отказ будут раскрывать этот факт. Это может быть или не быть проблемой для вас.

  • Ваше приложение должно будет поддерживать несколько версий браузера. Элемент управления веб-браузером .NET представляет собой оболочку вокруг реализации Internet Explorer на компьютере пользователя. Это будет IE6, 7, 8 и т. Д. В зависимости от того, что там установлено.

+0

Поддержка нескольких версий IE не должна быть проблемой. Мы не будем делать ничего очень сложного с html/css.Большинство страниц были бы предельно просты и немного больше отображали бы форму. Только одна коррекция на ваше сообщение, мы можем определить, нет ли сетевого подключения, и мы можем либо не отображать элемент управления WebBrowser, либо мы можем передать ему строковый/локальный файл, содержащий ошибку html. –

+0

Тимоти, отлично! Рад слышать, что ваш html/css хорошо работает с соответствующими версиями IE. Обратите внимание, что условия отказа браузера, которые приводят к ошибкам, могут быть более тонкими. Связь может быть прерывистой, сервер может быть недоступен, приложение может быть недоступно на сервере, сервер может возвращать ошибки http 500, сервер может периодически выходить из строя из-за нагрузки и т. Д. Опять же, не следует останавливать вас, просто вызывая проблему –

0

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

0

На самом деле это отличное решение. Однако одна вещь приходит на ум:

Почему бы просто не переключиться на полнофункциональное веб-приложение? Есть ли определенные вещи, которые вы можете делать только на стороне клиента за пределами браузера? Потому что, если нет, вероятно, вы значительно упростите сценарии развертывания, просто сделав все это веб-приложением.

+0

У него есть пользовательское оборудование, с которым он хочет взаимодействовать. –

+0

Ах, я пропустил эту часть. Виноват. Тем не менее это звучит как достойное решение. – Randolpho

1

Это зависит от типа приложения, но я не понимаю, почему это не сработало. Возможные недостатки: вы должны работать в HTML и JavaScript, компонент WebBrowser зависит от установленной версии Internet Explorer (не всегда такой же), пользовательский интерфейс не является действительно родным и, вероятно, будет выглядеть как веб-приложение (не обязательно быть недостатком). Если я прав, я думаю, что пользовательский интерфейс Microsoft Money был полностью основан на элементе управления WebBrowser.

+1

Наличие интерфейса HTML и JavaScript и CSS также могут быть огромным преимуществом. Некоторые вещи намного проще, например, объединение кнопки изображения и ссылки на URL в одну; в C#/Winforms это может быть бесполезно сложно; в HTML это только вопрос удаления внутренних тегов. –

1

Я бы не рекомендовал использовать элемент управления WebBrowser, если вам нужно реализовать любую сложную функциональность. Недостатками являются:

  • Его поведение зависит от установленной версии IE и настроек IE, но не идентично «реальному» IE. Я видел некоторые случаи, когда функциональность JS работала в автономном IE, но не работала в элементе управления WebBrowser без какой-либо очевидной причины (и, следовательно, без каких-либо шансов исправить его).

  • Его трудно настроить пользовательский интерфейс (изменить контекстное меню, сделать несколько сложных обработчиков событий), поскольку элемент управления не выставляет большую часть себя. Таким образом, было бы неоправданно трудно заставить его взаимодействовать с envinronment так, как вам нужно.

Вы могли бы рассмотреть возможность использования полностью веб-решения, работая в автономном браузере - по крайней мере, вы гораздо меньше шансов найти редкую ошибку там. Для взаимодействия с оборудованием можно использовать апплет или элемент управления ActiveX.

Другой вариант - разработать тонкий клиент в качестве приложения Windows, который каким-то образом настроил бы себя в зависимости от пользователя. Если вам все равно нужно встроить браузер, вы можете использовать Gecko (движок Mozilla) или WebKit (движок Chrome). У меня нет практического опыта с ними, но, вероятно, у них больше согласованности между встроенными и автономными версиями ,

+0

Мне нужно будет снова изучить ActiveX и плагины браузера, но у меня есть ощущение, что доступ к аппаратным средствам с помощью элементов управления plugins/activex будет больше проблем, чем пользовательское решение для браузера. Это было бы намного проще, если бы SilverLight поддерживал доступ к аппаратным средствам. –

+0

Я думаю, что элемент управления веб-браузером по умолчанию используется в библиотеке IE6, независимо от того, что пользователь обычно использует. –

3

Разве WPF не предоставит вам преимущества скиннинга для разных пользователей, сохранив при этом богатые преимущества пользовательского интерфейса?

Смежные вопросы