Я хочу разработать удлинитель блока расширения для VSCode. Расширение должно отображать обнаруженные тесты, сгруппированные в расширяемую иерархию, аннотировать состояние запуска, вывод отображения и ошибки для каждого теста, предоставлять команды запуска/отладки на разных уровнях и, конечно, красную/зеленую полосу.Расширение VSCode IPC с пользовательским интерфейсом внутри предварительного просмотра HTML
Грубо говоря, это «модель» и «вид», я планирую реализовать модель в процессе расширения, и я планирую реализовать представление в виде предварительного просмотра HTML на основе TextDocumentContentProvider
. (Есть ли лучший подход?)
Теперь модель и вид должны взаимодействовать друг с другом. Я хочу реализовать представление как одностраничное приложение. Представление отправит команды модели, и модель отправит события в представление (или представление будет опросить модель для событий). Представление будет обновляться в соответствии с полученными событиями.
Мой вопрос в том, какую коммуникационную технику я должен использовать? Может ли HTML-страница внутри предварительного просмотра HTML использовать API VSCode/Atom/Electron/Node? Могу ли я использовать экземпляры объектов или сделать небольшой IPC? До сих пор я не понял.
Я обнаружил, что я могу вызывать команды VSCode или обновить всю страницу, когда пользователь нажимает на ссылку с href
набором для конкретной схемы (command://
или тот, который я зарегистрирован мой TextDocumentContentProvider
).
Мне удалось открыть HTTP-прослушиватель (http.createServer
) в процессе расширения и связаться через XMLHttpRequest
со стороны предварительного просмотра HTML. Но мне кажется, что это тяжелый перебор.
Интересно, есть ли более подходящие способы сделать это?
ли вы найти ответ на этот вопрос? –
В случае, если кто-то другой сталкивается с этим: ответ выглядит так: «нет, нет встроенного способа общения», но использование socket.io для общения кажется легким и легким. –
Вы можете общаться с веб-просмотрами TextDocumentContentProvider с помощью команд. См. [Предварительный просмотр старой маркировки для примера] (https://github.com/Microsoft/vscode/blob/f88bbf9137d24d36d968ea6b2911786bfe103002/extensions/markdown/media/main.js#L37). Новый API веб-интерфейса делает это намного проще, однако –