从 vscode 扩展中的虚拟文档发送命令
sending a command from a virtual document in a vscode extension
我正在制作一个 Visual Studio 代码扩展,我在其中制作一个虚拟文档
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 将消息发送回分机。
如果我在虚拟文档中有这样一个 link:
<a href="command:extension.sayHi?message=hi">say Hi</a>
它调用命令但消息未定义。据我所知。
我不想使用 link 调用它,我想使用 TypeScript 从虚拟文档中的 Polymer Element (v2) 方法发送消息。
命令参数需要作为编码的 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://")
不太好,但很管用
我正在制作一个 Visual Studio 代码扩展,我在其中制作一个虚拟文档
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 将消息发送回分机。
如果我在虚拟文档中有这样一个 link:
<a href="command:extension.sayHi?message=hi">say Hi</a>
它调用命令但消息未定义。据我所知。
我不想使用 link 调用它,我想使用 TypeScript 从虚拟文档中的 Polymer Element (v2) 方法发送消息。
命令参数需要作为编码的 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://")
不太好,但很管用