salexdv / bsl_console

Консоль кода для 1С 8.3 (Управляемые и обычные формы)
MIT License
297 stars 55 forks source link

Работа консоли в веб-клиенте #272

Open BoostEx opened 2 years ago

BoostEx commented 2 years ago

Мы с коллегой взяли ваш редактор за основу для своей консоли кода. У нас получилось исправить взаимодействие 1С - JS в веб-клиенте. Для того, чтобы консоль "завелась" в веб-клиенте нужно сделать следующее:

  1. В качестве значения HTML-поля на стороне 1С указать не путь к файлу html (не важно, является он ссылкой на этот репозиторий или находится на клиентской машине), а именно html-текст страницы. В ходе экспериментов мы выяснили, что если указывается ссылка на страницу, то в этом случае, при обращении к Элементы.ПолеHTML.Документ возвращается значение Неопределено. А если указать именно html-текст страницы, возвращаемое значение принимает тип ВнешнийОбъект (или ExternalObject в веб-клиенте) и к нему можно обращаться для выполнения методов редактора, таких как init(), setText() и все другие.
  2. После выполнения первого пункта, мы столкнулись с проблемой: в тонком клиенте "отвалились" стили - перестал грузиться файл decorations.css. Перерыв кучу форумов, мы выяснили, что при использовании тега link нужно использовать атрибут charset со значением utf-8. Это решает проблему с этим файлом. Но к редактору подключается ещё один файл стилей - ./vs/editor/editor.main.css. По идее, при подключении этого файла стилей нужно тоже использовать указанный выше атрибут, но мы не смогли поправить генерацию тегов link (так мы простые 1С-ники :) ), поэтому поместили подключение этого файла в исходный текст страницы.

В результате мы добились работы с редактором в тонком клиенте, и в веб-клиенте. Но появилась ещё одна незначительная проблема: в веб-клиенте не генерируются события редактора, такие как EVENT_GET_METADATA, EVENT_QUERY_CONSTRUCT. Мы пробуем выяснить причину, по которой генерация событий не работает.

P.S. Все тесты проходили на версиях платформы 8.3.19.1331 и 8.3.17.1549

BoostEx commented 2 years ago

Чуть не забыл. По первому пункту. Нужно обязательно в head добавить тег base. Он будет использоваться для всех относительных путей.

salexdv commented 2 years ago

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

grumagargler commented 4 days ago

проблема: в веб-клиенте не генерируются события редактора, такие как EVENT_GET_METADATA, EVENT_QUERY_CONSTRUCT. Мы пробуем выяснить причину, по которой генерация событий не работает.

подскажите пожалуйста, вам удалось разобраться почему события в веб-клиенте не вызываются?