我正在构建一个 Visual Studio Code 扩展。此扩展有一个 TextDocumentContentProvider
,它通过 vscode.previewHtml
命令显示。
我希望此提供程序显示我的编译代码的结果。这似乎微不足道。但是,因为我的扩展也有调试器;我希望扩展上下文(或者更好的是,调试器上下文)能够与该预览选项卡的代码对话。这样,调试器就可以更新选项卡(向其发送重新编译的数据)并可能获取一些返回状态数据。
没有某种服务器,有什么办法可以做到这一点吗?我想我可以有一个从扩展上下文运行的网络服务器(因为它是节点)和预览 HTML 中的某种客户端连接到由预览选项卡模式 uri 指定的端口中的服务器,但它看起来有点麻烦.
我通常通过在 GitHub 上搜索具有类似功能的扩展来找到 VSC 扩展开发问题(和引用/示例)的答案,但我找不到任何能做到这一点的扩展(包括 Microsoft 的 two TextDocumentContentProvider
samples)。
那么,有没有人知道一个简单的方法来做到这一点,或者是否可能? (或者我可以调查的任何扩展)。
(编辑)我倾向于使用 Node WebSocket 服务器(在扩展级别)和 WebSocket 客户端(在预览 HTML 级别),这就是 LaTeX preview扩展用于实时预览更新。对我来说似乎非常有可能而且可能足够了,但是有点变通,因为我必须为操作建立自己的序列化协议(protocol)。如果可能的话,具有与 VSCode 命令(不仅仅是命令作为链接)进行通信的能力的类似 JS 上下文会更好。
最佳答案
编辑 (2018-11-01):现在可以通过新的 webview API 实现。参见 Matt Bierner's answer above真正解决问题。以下答案现已过时。
经过大量调查,事实证明在扩展/调试器代码和预览 (webview) 上下文之间没有正常的通信方式。
当前可用的功能有:
- 更新内容提供者,调用预览内容的重新渲染
- 通过需要单击的 HTML 链接从预览内容调用
vscode
命令 - 通过 injecting links 从预览内容调用
vscode
命令 - 通过编辑器界面进行一些滚动操作
这些都不适合与预览选项卡进行通信。
目前,基于 WebSocket 的客户端/服务器架构是在两个上下文之间提供双向通信的唯一方法。
An extension to the preview/webview support is being investigated ,所以这在未来可能会改变。
关于typescript - TextDocumentContentProvider HTML/JScontent 可以与扩展代码对话吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394095/