从vscode扩展中的虚拟文档发送命令

问题描述 投票:2回答:1

我正在制作一个Visual Studio Code扩展,我在其中创建一个虚拟文档

let provider = new TextDocumentContentProvider();
let registration = vscode.workspace.registerTextDocumentContentProvider('nucleus-preview', provider);

我用以下命令注册命令:

vscode.commands.registerCommand('extension.sendMessage', (message) => {
    console.log('the message is ', message)
});

在虚拟文档中,我想使用JavaScript将消息发送回扩展。

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

<a href="command:extension.sayHi?message=hi">say Hi</a>

它调用命令但消息未定义。就我而言。

我不想使用链接调用它,我想使用TypeScript从虚拟文档中的Polymer Element(v2)的方法发送消息。

visual-studio-code vscode-extensions
1个回答
2
投票

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

command:extension.sayHi?%5B%22hi%22%5D

尝试使用辅助函数,如:

const createCommandUri = (name, ...args) =>
    `command:${name}?${encodeURIComponent(JSON.stringify(args))}`

我们没有官方API以编程方式将命令发送回编辑器,但您可以使用built-in markdown extension's method

window.parent.postMessage({
    command: "did-click-link",
    data: createCommandUri('extension.sendMessage', 'hi')
}, "file://")

不是很好,但它有效

© www.soinside.com 2019 - 2024. All rights reserved.