2016-11-22 5 views
3

Я хочу разработать удлинитель блока расширения для VSCode. Расширение должно отображать обнаруженные тесты, сгруппированные в расширяемую иерархию, аннотировать состояние запуска, вывод отображения и ошибки для каждого теста, предоставлять команды запуска/отладки на разных уровнях и, конечно, красную/зеленую полосу.Расширение VSCode IPC с пользовательским интерфейсом внутри предварительного просмотра HTML

Грубо говоря, это «модель» и «вид», я планирую реализовать модель в процессе расширения, и я планирую реализовать представление в виде предварительного просмотра HTML на основе TextDocumentContentProvider. (Есть ли лучший подход?)

Теперь модель и вид должны взаимодействовать друг с другом. Я хочу реализовать представление как одностраничное приложение. Представление отправит команды модели, и модель отправит события в представление (или представление будет опросить модель для событий). Представление будет обновляться в соответствии с полученными событиями.

Мой вопрос в том, какую коммуникационную технику я должен использовать? Может ли HTML-страница внутри предварительного просмотра HTML использовать API VSCode/Atom/Electron/Node? Могу ли я использовать экземпляры объектов или сделать небольшой IPC? До сих пор я не понял.

Я обнаружил, что я могу вызывать команды VSCode или обновить всю страницу, когда пользователь нажимает на ссылку с href набором для конкретной схемы (command:// или тот, который я зарегистрирован мой TextDocumentContentProvider).

Мне удалось открыть HTTP-прослушиватель (http.createServer) в процессе расширения и связаться через XMLHttpRequest со стороны предварительного просмотра HTML. Но мне кажется, что это тяжелый перебор.

Интересно, есть ли более подходящие способы сделать это?

+0

ли вы найти ответ на этот вопрос? –

+0

В случае, если кто-то другой сталкивается с этим: ответ выглядит так: «нет, нет встроенного способа общения», но использование socket.io для общения кажется легким и легким. –

+0

Вы можете общаться с веб-просмотрами TextDocumentContentProvider с помощью команд. См. [Предварительный просмотр старой маркировки для примера] (https://github.com/Microsoft/vscode/blob/f88bbf9137d24d36d968ea6b2911786bfe103002/extensions/markdown/media/main.js#L37). Новый API веб-интерфейса делает это намного проще, однако –

ответ

0

VSCode имеет новый API, который упрощает это.

https://github.com/Microsoft/vscode/issues/43713

Вы можете найти новый API here

попробовать новый API:

  1. Добавить "enableProposedApi": истинный к вашему package.json

  2. Вручную скачайте vscode.proposed.d.ts и добавьте его в свой проект: https://raw.githubusercontent.com/Microsoft/vscode/master/src/vs/vscode.proposed.d.ts

  3. Запустите расширение с последними инсайдеров VS Code строить