我正在构建Visual Studio代码扩展。此扩展程序的TextDocumentContentProvider
与vscode.previewHtml
命令一起显示。
我希望此提供程序显示已编译代码的结果。这似乎微不足道。但是,因为我的扩展还有一个调试器;我希望扩展上下文(或更好的是,调试器上下文)能够与该预览选项卡的代码进行通信。这样,调试器可以更新选项卡(向其发送重新编译的数据),并可能返回一些数据以获取状态。
如果没有某种类型的服务器,有没有办法做到这一点?我想我可以从扩展上下文(因为它的节点)运行一个网络服务器和预览HTML中某种类型的客户端,它连接到由预览选项卡模式uri指定的端口中的服务器,但它看起来有点麻烦。
我通常通过在GitHub上搜索具有类似功能的扩展来找到VSC扩展开发问题(和参考/示例)的答案,但我找不到任何相同功能的扩展(包括Microsoft' s { {3}})。
那么,有没有人知道一个简单的方法,或者它是否可能? (或任何我可以调查的扩展名。)
(编辑)我倾向于使用Node WebSocket服务器(在扩展级别)和WebSocket客户端(在预览HTML级别),这是two TextDocumentContentProvider
samples扩展用于实时预览的功能更新。对我来说似乎非常可能并且可能已经足够了,但是因为我必须为行动建立自己的序列化协议,所以需要一些解决方法。如果可能的话,拥有与VSCode命令(而不仅仅是命令作为链接)通信能力的类似JS上下文会更好。
答案 0 :(得分:2)
编辑(2018-11-01):现在可以使用新的webview API。请参阅Matt Bierner's answer above以获得问题的真正解决方案。以下答案现已过时。
经过大量调查后发现,扩展/调试代码与预览(webview)上下文之间没有正常的通信方式。
目前可用的功能包括:
vscode
个命令vscode
个命令
这些都不适合与预览标签进行通信。
目前,基于WebSocket的客户端/服务器架构是在两种上下文之间提供双向通信的唯一方法。
An extension to the preview/webview support is being investigated,所以将来可能会改变。
答案 1 :(得分:1)
使用webview api现在很容易做到。扩展程序可以将消息发布到Webview内容,而Webview可以将消息发布回扩展程序。
This sample extension演示了如何使用Webview API和Webview通信。 webview docs还详细介绍了api和webview通信。
答案 2 :(得分:0)
已内置更新文本内容提供程序。您的文本内容提供商应具有onDidChange
事件属性。 previewHTML
impl连接到那个以了解何时更新到期。因此,在您的扩展程序中,只要您感到需要,就可以拨打update function of your provider triggers this even。这将导致previewHTML
impl再次触发您的provideTextDocumentContent
功能,您可以在其中提供更新的数据。