npapi

36
Выходим за границы дозволенного. NPAPI, NaCl и другие страшные слова Тимур Рахматиллаев twitter.com/eskat0n 4-я конференция .NET разработчиков 28 апреля 2012

Upload: timur-rakhmatillaev

Post on 16-Jun-2015

10.612 views

Category:

Technology


1 download

DESCRIPTION

В докладе будет рассказано и показано, как расширить возможности стандартного ASP.NET MVC3 web-приложения, используя браузерный native-плагин, написанный на языке C++. Будет показано применение фреймворка FireBreath, позволяющего легко создавать гибкие, кроссплатформенные и кроссбраузерные плагины. Будут затронуты вопросы взаимодействия managed-кода на C# с native-кодом на C++, а также показаны возможности по вызову кода на C++/C# из клиентского JavaScript-кода web-страницы. Применение вышеназванных технологий будет показано на примерах, одним из которых является разработанный для нужд системы электронного документооборота плагин, позволяющий осуществлять взаимодействие со сканером документов, подключенным к компьютеру клиента, из кода на JavaScript. Также будет даваться краткое описание других технологий, связанных с выполнением браузером не специфичных для него функций: NaCl, Pepper, и приведено сравнение этих технологий.

TRANSCRIPT

Page 1: NPAPI

Выходим за границы дозволенного. NPAPI, NaCl и другие страшные

слова

Тимур Рахматиллаевtwitter.com/eskat0n

4-я конференция .NET разработчиков28 апреля 2012

Page 2: NPAPI

Типичное веб-приложение

Page 3: NPAPI

Типичное комплексное веб-приложение

Page 4: NPAPI

Взаимодействие клиентского кода и компьютера

Ресурсы:• CPU• RAM• показания датчиков• ФС

JavaScript

Page 5: NPAPI

НЕтипичное комплексное веб-приложение

Page 6: NPAPI

Что может сделать «чистый» JavaScript

Ничего полезного

Page 7: NPAPI

HTML5 меняет ситуацию!

Page 8: NPAPI

HTML5 меняет ситуацию!?

• File API• Geolocation API• Battery API• SQL for Web

Page 9: NPAPI

HTML5 не меняет ситуацию!

Page 10: NPAPI

Все браузеры разные

Page 11: NPAPI

Средства расширения функциональности браузеров

• UserJS• Расширения• Плагины

Page 12: NPAPI

UserJs

Page 13: NPAPI

UserJs

Функциональность не отличается от обычного JavaScript’а, подключенного к HTML-странице

Page 14: NPAPI

Расширения

API и предоставляемые возможности различаются в зависимости от браузера. Не подходят для взаимодействия с периферией.

Page 15: NPAPI

Плагины

Платформозависимый код, выполняемый в потоке браузера.Технологии реализации:• Netscape Plugin Application Programming

Interface (NPAPI)• NativeClient (NaCl)• Pepper Plugin API (PPAPI)• ActiveX

Page 16: NPAPI

Плагины

Платформозависимый код, выполняемый в потоке браузера.Технологии реализации:• Netscape Plugin Application Programming

Interface (NPAPI)• NativeClient (NaCl)• Pepper Plugin API (PPAPI)• ActiveX

Page 17: NPAPI

Все браузеры разные, будь они прокляты

Page 18: NPAPI

Поддержка NPAPI

• Google Chrome• Safari• Firefox• Opera• Internet Explorer…

Page 19: NPAPI

Поддержка NPAPI

• Google Chrome• Safari• Firefox• Opera• Internet Explorer… до версии 5.5

Page 20: NPAPI

NPAPI-плагин

Физически представляет из себя подключаемую динамически библиотеку с нативным кодом (dll, so).

Page 21: NPAPI

Internet Explorer жует клей ActiveX

Исходный код

Обвертка

NPAPI library

ActiveX library

Page 22: NPAPI

Общий механизм работы с NPAPI-плагинами

• Встраивание плагина на страницу с помощью HTML

• Определение местоположения файла плагина и его загрузка

• При необходимости вызов кода плагина для рендеринга контента на HTML-странице

• Взаимодействие с плагином через JavaScript

Page 23: NPAPI

Встраивание плагина на страницу

<object id=“myplugin" type="application/x-myplugin" width="300" height="300"> <param name="onload" value=“onPlugLoad" /></object>

Page 24: NPAPI

Идентификация плагина

Plugin 1

Plugin 2

application/x-plugin1

application/x-plugin2

application/x-plugin11

Page 25: NPAPI

Загрузка NPAPI-плагина

Ключ реестра, указывающийна расположение dll-файла

Page 26: NPAPI

Рендеринг контента с помощью плагина

<object> … </object>

Функция рендеринга

Page 27: NPAPI

Взаимодействие с плагином через JavaScript

• Плагин представлен JavaScript-объектом, находящимся в DOM-дереве документа

• При обращении к свойствам JavaScript-объекта плагина или при вызове его методов происходит упаковка передаваемых/возвращаемых значений

• Каждому свойству или методу соответствует нативный код

Page 28: NPAPI

FireBreath framework

• Предоставляет единое высокоуровневое API для создания NPAPI-плагинов для всех браузеров

• Для Internet Explorer происходит регистрация плагина как ActiveX-компонента

• Предоставляет возможность автоматизированной установкиплагина

Page 29: NPAPI

FireBreath framework

Плюсы:• Возможность написания единого кода плагина

для работы во всех браузерах• Инструментарий по упрощению сборки• Прозрачный и простой API• Легко читаемый исходный код

Минусы:• Дополнительные инфраструктурные зависимости• Недостаточно подробная документация

Page 30: NPAPI

Начало работы с FireBreath

• Python• VC++• Cmake• Visual Studio (не-Express версии)

Page 31: NPAPI

Демонстрация работы FireBreath

Page 32: NPAPI

А где же .NET?

Page 33: NPAPI

У нас тут своя атмосфера!

• Возможна реализация с помощью FireBreath небольшой тонкой обвертки, которая осуществляет трансляцию вызовов из JavaScript-кода к коду на платформе .NET

• Используется связка из NPAPI-плагина и Managed COM-компонента

Page 34: NPAPI

IndyCode scanner plugin

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

Page 35: NPAPI

IndyCode scanner plugin

Page 36: NPAPI

Спасибо за внимание

Тимур Рахматиллаев[email protected]

twitter.com/eskat0n