Как встроить форму 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
, Или же связь со встроенной формой нарушена.