typescript - TextDocumentContentProvider HTML/JScontent 可以与扩展代码对话吗?

标签 typescript visual-studio-code vscode-extensions

我正在构建一个 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/

相关文章:

javascript - 与状态相关的每 5 秒运行一次方法

git - 如何将当前分支的文件与 VsCode 中给定提交的文件进行比较?

c++ - 如何为 Visual Studio 代码设置 boost

vscode-extensions - VsCode 扩展。如何通过右键单击选择 TreeView 项目

typescript - Visual Studio Code : Display JSdoc for attribute

typescript - 使用字符串访问 TypeScript 可选对象属性

http - Angular 2 HTTP(《英雄之旅》教程-angular网站)

javascript - 将数组 toString() 生成的字符串转换回数组

debugging - VSCode Chrome 调试器未在 Typescript 文件中停止

node.js - 如何在 Node+Typescript+VSCode 中查找缺少的 Await on Async 函数调用?