Правильное взаимодействие JavaScript в Chromium и PHP DevelStudio на десктопе.

3.10.2015 - 2983 просмотрa ;)

Встраивая CodeMirror 5.7 в свой редактор кода на DevelStudio я наконец-то допер до того какова должна быть правильная схема взаимодействия JavaScript из втроенного Chromium и собственно самого PHP кода.

JavaScript вызывает PHP.call в том месте когда надо передать текст из JavaScript.
При этом управление попадает в PHP DevelStudio в определенную функцию. Функция эта одна, она принимает текст и кладет его например в memo.

В нашей с вами задаче весь код необходимо писать на PHP, работать с JavaScript не нужно, ввиду того что это другой язык, он имеет свой regexp, у него какая-то странная событийная модель ломающая голову простому процедурщику.


Представим что нам надо реализовать 10 функций по обработке текста в редакторе.
Каждая должна брать текст из CodeMirror textarea (Chromium), делать там обработку текста и класть обратно.

Класть в CodeMirror можно одной функцией. Это просто и удобно, а вот пришедший код в memo не совсем ясно как обрабатывать по той причине что приходит код асинхронно и попадает неизвестно когда в memo.

Вот тут и заковырка, которую пришлось решить так:

  • При вызове функции отдается запрос на текущий код в Chromium
  • Одновременно фиксируется название команды которая должна выполниться по приходу контента, например мы просто в edit пишем: insertImage
  • Код асинхронно приходит в memo, это событие перехватывается
  • Узнаем какая была команда
  • Обрабатываем текст
  • Отдаем код в редактор

Это готовое решение, все работает как часы и взаимодействие налажено.

Конечно скажете вы, мог бы написать все на том же nodeJS, но там нет такого удобного дизайнера как в DevelStudio. Да и нативное приложение получится убогое нативное приложение где один Хромиум.

Статьи из раздела, Видеочат рулетка