2017-08-03 91 views
2

我想提出一個Visual Studio代碼的擴展,在這裏我做一個虛擬文件從虛擬文件發送命令在vscode擴展

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從虛擬文檔中的聚合物元素(v2)的方法發送消息。

回答

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://") 

不是很好,但它的工作

+0

這很好,謝謝。 –