Update extension.js

This commit is contained in:
erikraft 2025-06-18 17:16:09 -03:00
parent 7a7efd9db6
commit 4f0fa3603f
1 changed files with 39 additions and 3 deletions

View File

@ -24,7 +24,26 @@ class ErikrafTDropViewProvider {
};
webviewView.webview.html = this.getWebviewContent(webviewView.webview);
// Listen for messages from the webview
handleWebviewMessages(webviewView.webview);
}
}
// Função para lidar com mensagens do webview
function handleWebviewMessages(webview) {
webview.onDidReceiveMessage(async (message) => {
if (message && message.type && message.url) {
if (message.type === 'external-link' || message.type === 'download') {
try {
await vscode.env.openExternal(vscode.Uri.parse(message.url));
} catch (err) {
vscode.window.showErrorMessage('Não foi possível abrir o link externo: ' + message.url);
}
}
}
});
}
getWebviewContent(webview) {
return `
@ -67,10 +86,27 @@ class ErikrafTDropViewProvider {
referrerpolicy="strict-origin-when-cross-origin"
></iframe>
<script>
// Handle external links from iframe
const vscode = acquireVsCodeApi();
// Listen for messages coming from any embedded iframe (cross-origin)
window.addEventListener('message', (event) => {
if (event.data.type === 'external-link') {
parent.postMessage({ type: 'external-link', url: event.data.url }, '*');
if (event.data && (event.data.type === 'external-link' || event.data.type === 'download')) {
vscode.postMessage(event.data);
}
});
// Intercept clicks inside the webview itself
document.addEventListener('click', (event) => {
const link = event.target.closest('a');
if (link && link.href.startsWith('http')) {
event.preventDefault();
vscode.postMessage({ type: 'external-link', url: link.href });
return;
}
const downloadLink = event.target.closest('a[download]');
if (downloadLink) {
event.preventDefault();
vscode.postMessage({ type: 'download', url: downloadLink.href });
}
});
</script>