Расширение Google Chrome с переходом NPAPI на NaCl

Недавно я разработал расширение для Google Chrome, которое использует плагин NPAPI, созданный с использованием платформы FireBreath. Я только сейчас узнал, что Google вскоре прекратит использование этих типов плагинов и в конечном итоге запретит все существующие расширения, которые их используют. Итак, я хотел бы в конечном итоге перейти к архитектуре NaCl / PPAPI, но я не уверен, может ли эта архитектура поддерживать то, что я сейчас делаю в плагине NPAPI.

В моем текущем плагине NPAPI я поддерживаю OSX и Windows. В версии OSX плагин выполняет функцию system(), которая выполняет небольшой 1-строчный яблочный скрипт. Это выглядит так:

osascript -e 'tell app ... 

В версии для Windows он выполняет функции в библиотеке COM. Обе версии в итоге делают одну и ту же вещь. Другой вариант, который у меня есть, - выполнение скрипта Python. Если бы я пошел по этому пути, я бы, скорее всего, захотел встроить Python в нативный компонент.

Возможно ли что-нибудь из этого с NaCl / PPAPI?

3 ответа

Решение

Поскольку вы уже используете расширение, вы можете рассмотреть Native Messaging как замену использованию NPAPI.

Возможность запускать произвольную функцию system() или выполнять произвольные функции из библиотеки COM - причина № 1 для устаревания NPAPI. То же самое для выполнения сценария Python (конечно, вы можете выполнить сценарий Python в NaCl - но он также не сможет вызывать функцию system() или библиотеку COM).

Это не новость: как было отмечено в книге Chrome Comic в день выпуска Chromium, плагины NPAPI не имеют ограничений и являются большой проблемой: http://www.google.com/googlebooks/chrome/small_30.html

Уже тогда было очевидно, что эту ситуацию можно терпеть только так долго. Плагины допускались в течение пяти лет, потому что некоторые важные вещи были без них невозможны, но теперь пришло время убить плагины и убедиться, что ничто в браузере не может напрямую обращаться к ОС.

Если вы хотите реализовать некоторые функции, которые в настоящее время не могут быть реализованы в браузере из-за отсутствия подходящего API, правильный способ - спросить об этом в chromium-dev и добавить этот API в Chromium (и, возможно, в другие браузеры тоже). Например, недавно был добавлен доступ к COM-портам (не к библиотекам) (см. http://developer.chrome.com/apps/app_hardware.html).

Если вам не нужно взаимодействие между браузером и приложением, вы можете использовать поддержку внешних протоколов. Вам необходимо зарегистрировать протокол в реестре на Windows. Я не знаю, как внешние протоколы работают на OSX. Когда пользователь щелкает ссылку на внешний протокол, Chrome отображает диалоговое окно, позволяющее пользователю запустить приложение.

Другие вопросы по тегам