Visual studio code 从vscode扩展名中的虚拟文档发送命令

Visual studio code 从vscode扩展名中的虚拟文档发送命令,visual-studio-code,vscode-extensions,Visual Studio Code,Vscode Extensions,我正在制作一个VisualStudio代码扩展,在这里我制作了一个虚拟文档 let provider=new TextDocumentContentProvider(); 让注册=vscode.workspace.registerTextDocumentContentProvider('nucleus-preview',provider); 我向以下人员注册了一个命令: vscode.commands.registerCommand('extension.sendMessage',(messa

我正在制作一个VisualStudio代码扩展,在这里我制作了一个虚拟文档

let provider=new TextDocumentContentProvider();
让注册=vscode.workspace.registerTextDocumentContentProvider('nucleus-preview',provider);
我向以下人员注册了一个命令:

vscode.commands.registerCommand('extension.sendMessage',(message)=>{
console.log('消息是',消息)
});
在虚拟文档中,我想使用JavaScript将消息发送回扩展

如果我在虚拟文档中有这样的链接:


它调用命令,但消息未定义。这就是我能做到的


我不想使用链接调用它,我想使用虚拟文档中聚合元素(v2)方法的TypeScript发送消息。

命令参数需要作为编码的json数组而不是参数传递:

command:extension.sayHi?%5B%22hi%22%5D
尝试使用以下帮助器函数:

const createCommandUri=(名称,…参数)=>
`命令:${name}?${encodeURIComponent(JSON.stringify(args))}`

我们没有官方API以编程方式将命令发送回编辑器,但您可以使用:

window.parent.postMessage({
命令:“点击链接”,
数据:createCommandUri('extension.sendMessage','hi')
},“文件:/”)

不是很好,但很有效

@Phillgiggles你能分享整个解决方案吗?我正在尝试从链接执行命令,但没有成功。。。