Как мне «вырваться» из песочницы браузера? - PullRequest
1 голос
/ 18 ноября 2010

Мне нужно создать веб-приложение (которое живет в браузере ), которое может подключаться и считывать данные с устройств, подключенных через USB или последовательный порт.

Намомент, я использую элемент управления ActiveX, чтобы сделать это.Тем не менее, я хотел бы переписать эту систему, чтобы сделать ее кросс-браузерной (поддержка Firefox) и в конечном итоге кросс-платформенной (поддержка Safari на Mac).ActiveX не является ни кросс-браузерным, ни кроссплатформенным, поэтому я ищу альтернативную технологию.

Моим первым стремлением было бы использовать Silverlight, потому что Silverlight 4 предоставляет доступ к COM Automation.К сожалению, это работает только с OOB (вне браузера) приложений Silverlight - системы в браузере все еще связаны в песочнице и не имеют доступа.

Итак, какие технологии существуют (каркасыплагинов для браузера и т. д.), которые позволят мне взаимодействовать с USB / последовательным устройством из веб-приложения на основе браузера?Каковы плюсы / минусы каждого?

Ответы [ 3 ]

1 голос
/ 18 ноября 2010

Это может быть больно, но вы можете использовать подписанный Java-апплет .Подписанные Java-апплеты могут иметь полный доступ к системе пользователя.

Java не имеет встроенной поддержки USB, поэтому вам, вероятно, потребуется развернуть свой собственный JNI интерфейск собственным API-интерфейсам USB.

Использование JNI в апплете может быть сложным.Я делал это раньше.Если вы просматриваете эту тему в Google, в большинстве результатов говорится «не делайте этого» или «вы не можете этого сделать».Ну, вы можете сделать это.

Вот как я это сделал: я упаковал нативные библиотеки (DLL и т. Д.) Внутри JAR апплета, а затем прочитал нативные библиотеки из JAR, используя, например, getResourceAsStream .Затем я записал библиотеки в соответствующее место на диске (например, $ {user.home} /. Myapp /.) Затем я использовал System.load для загрузки библиотеки JNI.

Возможны проблемы ClassLoader с библиотеками и апплетами JNI.Проблемы тонкие и их трудно объяснить.Они в основном связаны с тем фактом, что JVM может загружать и привязывать определенную библиотеку JNI только один раз для каждого экземпляра виртуальной машины, но апплеты часто создаются, часто с собственным новым ClassLoader, что может быть проблематично.Работа, проделанная Sun над разделением процессов в плагине браузера следующего поколения , возможно, разрешила некоторые из этих проблем, но ваши пользователи будут иметь это только в том случае, если они используют Java 1.6.0_10 или более позднюю версию.

Можно также использовать JNA в подписанном апплете.Я бы не рекомендовал использовать JNA для прямого доступа к USB API.Но иногда JNA помогает сэкономить время на доступ к простым встроенным функциям.Хотя после настройки инфраструктуры JNI JNA, вероятно, будет иметь меньшее значение.


Вот еще несколько случайных мыслей:

  1. Java WebStart - может быть запущен избраузер, но работает вне браузера
  2. Microsoft ClickOnce - может быть запущен из браузера, но работает вне браузера
  3. Flash / AIR - не может выйти из своей песочницы
1 голос
/ 18 ноября 2010

Я думаю, что в этом случае вам лучше всего выбрать Java. USB, хотя и является отраслевым стандартом с точки зрения протокола , определенно не стандартизирован с точки зрения реализации с нуля. По этой причине вам по-прежнему потребуется отдельная реализация Java USB для каждой отдельной платформы (windows, linux, osx, bsd), которую вы намереваетесь поддерживать. Конечно, вам также придется платить за сертификаты для подписи кода, чтобы вы могли попытаться убедить людей предоставить вашему приложению тот тип доступа, который ему требуется; то, что браузеры очень стараются запретить доступ, и большинство людей в наше время очень не хотят предоставлять. Тем не менее, здесь есть старая статья IBM о различных проектах Java USB, которая хорошо читается. Удачи.

http://www.ibm.com/developerworks/library/j-usb.html

-Oisin

0 голосов
/ 21 ноября 2010

Лучшее решение, с которым я когда-либо сталкивался, - это кросс-браузер / кроссплатформенная система плагинов под названием FireBreath . Это интегрированная в C ++ платформа, которая позволяет генерировать подключаемые модули для ActiveX и NPAPI из одной и той же кодовой базы .

Так что соберите его один раз, сделайте так, чтобы он работал, и он компилируется в одну DLL, которую вы можете развернуть в любой среде: ActiveX для IE, NPAPI для всех остальных.

...