typescript - 将消息从 webview 发送到扩展

标签 typescript visual-studio-code vscode-extensions

我有一个 webview (SidebarProvider),它允许用户输入并发送。我想将此类输入发送到扩展 SearchedWordPanel

步骤:

  1. 在我的边栏 View (html、js 和 css)中,用户键入一个词并按“搜索”。 (作品)
  2. 单词被发送到 SidebarProvider,SidebarProvider 使用 onDidReceiveMessage 接收消息并运行命令以显示 SearchedWordPanel。 (作品)
  3. SearchedWordPanel 打开并显示用户输入的单词。 (问题)

我可以执行第 1 点和第 2 点,但无法将搜索到的词发送到 SearchedWordPanel

extensions.ts

const sidebarProvider = new SidebarProvider(context.extensionUri);
  context.subscriptions.push(
    vscode.window.registerWebviewViewProvider(
      "vsmyapp-sidebar",
      sidebarProvider
    )
  );

context.subscriptions.push(
  vscode.commands.registerCommand('vsmyapp.showSearched', () => {
    SearchedWordPanel.kill();
    SearchedWordPanel.createOrShow(context.extensionUri);
  })
);

侧边栏 View

<button on:click={() =>
  tsvscode.postMessage({
    type: 'onSearch',
    value: searchedText
  })
}>Search</button>

侧边栏提供者

webviewView.webview.onDidReceiveMessage(async (data) => {
  switch (data.type) {
    case "onSearch" : {
      if (!data.value) {
        return;
      }
      vscode.window.showInformationMessage(data.value); <-- WORKS
      vscode.commands.executeCommand( <--WORKS, the command is run. BUT How do I send data.value to SearchedWordPanel?
        "vsmyapp.showSearched",
      );
      COMMAND_THAT_SENDS_(data.value)_TO_SearchedWordPanel // Pseudocode
      break;
    }

问题:当我执行vscode.commands.executeCommand("vsmyapp. showSearched");SidebarProvider 中?

最佳答案

Webview 有 postMessage - https://code.visualstudio.com/api/extension-guides/webview#passing-messages-from-an-extension-to-a-webview .

我不确定 SearchedWordPanel 是什么(它不是 WebviewPanel),可能是一个包装器。

假设 SearchedWordPanel 具有原生 WebviewPanel 作为 Prop panel。要向其发送消息,您可以执行以下操作:

SearchedWordPanel.panel.postMessage()

关于typescript - 将消息从 webview 发送到扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65543532/

相关文章:

javascript - TypeScript 生成的 JavaScript 中出现类型错误

javascript - typescript中导入模块的方式有哪些以及require js在模块加载中的作用是什么

angular - 我在 ngx-datatable 的每个标题单元格中都有一个自定义下拉组件

typescript - 由于 NgZone 引用错误,预渲染失败

visual-studio-code - VSCode 键盘命令 ID

visual-studio-code - 如何使用 webpack 正确捆绑 vscode 扩展

javascript - angular 5, reactive form-重置所需的表单控件不会重置输入下所需的错误

python - "from __future__ import annotations"在 VSCode 中产生 "annotations is not defined"

visual-studio-code - 如何在vs代码上禁用[abc]建议?

visual-studio-code - VS Code 扩展 - 以编程方式查找键绑定(bind)