Как встроить форму Delphi VCL в HTML-страницу, используя NPAPI?

Существуют известные способы написания плагинов ActiveX для Delphi, но сам ActiveX накладывает множество ограничений в браузерах, отличных от IE. Поэтому я подумал - как скомпилировать плагин в формате NPAPI, изначально совместимый с Chrome/Firefox?

Назначение плагина - позволить встраивать форму VCL в HTML-страницу и иметь возможность двунаправленного взаимодействия с этой формой с помощью JavaScript. Например, нажатие кнопки на форме вызовет функцию JavaScript на странице, а функции JavaScript на странице могут отправлять события в форму VCL. Как этого можно достичь?

1 ответ

Решение

Список существующих оболочек NPAPI для Delphi можно найти в багтрекере Mozilla: https://www.mozdev.org/bugs/show_bug.cgi?id=8708

Последняя запись (инфраструктура плагинов NPAPI с поддержкой сценариев + демонстрация Юрия Сидорова) предлагает именно то, что нужно.

С этим VCL Form проект может быть скомпилирован в DLL, совместимую с NPAPI. Manifest.json также необходимо добавить. После этого плагин может быть установлен в Chrome, как обычно.

Следующий HTML-код встраивает форму VCL, которая хранится в плагине:

<EMBED id="embed1" TYPE="application/x-delphi-demo-plugin" ALIGN=CENTER WIDTH=400 HEIGHT=300>

<script>
var embed1 = document.getElementById('embed1');
</script>

<input type=button value="Show Value" onclick='alert("Value=" + embed1.value);'>

И вот как форма может изменить HTML-страницу вокруг нее:

with Plugin.GetBrowserWindowObject do
  GetObject('document')['bgColor'] := clRed;

PS Единственное исправление, которое следует применить к современным версиям Delphi - изменение string а также PChar в AnsiString а также PAnsiChar в течение NPPlugin.pas, Или же связь со встроенной формой нарушена.

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