【问题标题】:In vs-code extensions, how to pass parameters into commands in viewsWelcome.contents在 vs-code 扩展中,如何将参数传递给 viewsWelcome.contents 中的命令
【发布时间】:2021-08-06 01:33:05
【问题描述】:

我正在玩 vs 代码扩展开发,我正在尝试创建一个 viewsWelcome 元素。

content 接受带有 markdown 注释的字符串,以下按预期工作

"viewsWelcome": [
  {
    "view": "view-id",
    "contents": "[Clone Repository](command:git.clone)"
  }
]

但是,当尝试将 command:git.clone 替换为接受 uri 作为参数的 command:vscode.open 时,该参数不起作用。

"viewsWelcome": [
  {
    "view": "view-id",
    "contents": "[Open URL](command:vscode.open?[https://foobar.com])"
  }
]

我没有找到关于语法的文档,除了一些例子here,它不能正常工作

【问题讨论】:

  • 查看 stackoverflow.com/a/63792186/836330 了解 Uri.file('path/to/file' 语法或 vscode.Uri.parse('example.com') : vscode.Uri.parse('https://example.com')
  • 您是否尝试如下设置contents 属性:"contents": "[Open URL](command:vscode.open?[\"https://foobar.com\"])"?请注意我用反斜杠转义的双引号。
  • @ct_jdr 谢谢,但它不起作用

标签: visual-studio-code vscode-extensions


【解决方案1】:

使用以下代码生成正确的参数字符串:

const args = [ 
    vscode.Uri.parse("https://foobar.com") 
];

const encodedArgs = encodeURIComponent(
    JSON.stringify(args)
);
    
console.log(encodedArgs);
// %5B%7B%22%24mid%22%3A1%2C%22path%22%3A%22%2F%22%2C%22scheme%22%3A%22https%22%2C%22authority%22%3A%22foobar.com%22%7D%5D

然后将编码后的参数添加到command: URI:

"viewsWelcome": [
  {
    "view": "view-id",
    "contents": "[Open URL](command:vscode.open?%5B%7B%22%24mid%22%3A1%2C%22path%22%3A%22%2F%22%2C%22scheme%22%3A%22https%22%2C%22authority%22%3A%22foobar.com%22%7D%5D)"
  }
]

如您所见,仅像您所做的那样将 URL 作为纯字符串传递是不够的。它必须是 vscode.Uri 的 JSON 表示。 此外,在将生成的 JSON 添加到 command: URI 之前,您必须对其进行正确的 URL 编码。

顺便说一句,VS Code API docs 中的“command:git.stage”示例让我走上了正轨。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 2019-08-11
    • 2019-06-09
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    相关资源
    最近更新 更多