typescript - Trimiterea unui mesaj de la webview la extensie
Am un webview (SidebarProvider) care îi permite utilizatorului să introducă un input și să îl trimită. Vreau să trimit un astfel de input către o extensie SearchedWordPanel.
Pași :
- În vizualizarea mea Sidebar (html, js și css), utilizatorul tastează un cuvânt și apasă „căutare”. (Funcționează)
- Cuvântul este trimis către SidebarProvider, care primește mesajul folosind
onDidReceiveMessageși rulează comanda pentru a afișa SearchedWordPanel. (Funcționează) SearchedWordPanelse deschide și afișează cuvântul introdus de utilizator. (Întrebare)
Pot să fac punctele 1 și 2, dar nu să trimit cuvântul căutat către SearchedWordPanel.
extensii.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);
})
);
VizualizareBaraLaterală
<button on:click={() =>
tsvscode.postMessage({
type: 'onSearch',
value: searchedText
})
}>Search</button>
FurnizorSidebar
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;
}
Întrebare: cum pot trimite data.value către SearchedWordPanel atunci când execut vscode.commands.executeCommand("vsmyapp.showSearched"); în SidebarProvider?
Răspuns #1
Webview are postMessage - https://code.visualstudio.com/api/extension-guides/webview#passing-messages-from-an-extension-to-a-webview.
Nu sunt sigur ce este SearchedWordPanel (nu este un WebviewPanel), probabil un înveliș.
Să spunem că SearchedWordPanel are ca prop panel WebviewPanel nativ. Pentru a-i trimite un mesaj, poți face:
SearchedWordPanel.panel.postMessage()
