Update extension.js
This commit is contained in:
parent
7a7efd9db6
commit
4f0fa3603f
|
@ -24,7 +24,26 @@ class ErikrafTDropViewProvider {
|
||||||
};
|
};
|
||||||
|
|
||||||
webviewView.webview.html = this.getWebviewContent(webviewView.webview);
|
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) {
|
getWebviewContent(webview) {
|
||||||
return `
|
return `
|
||||||
|
@ -67,10 +86,27 @@ class ErikrafTDropViewProvider {
|
||||||
referrerpolicy="strict-origin-when-cross-origin"
|
referrerpolicy="strict-origin-when-cross-origin"
|
||||||
></iframe>
|
></iframe>
|
||||||
<script>
|
<script>
|
||||||
// Handle external links from iframe
|
const vscode = acquireVsCodeApi();
|
||||||
|
|
||||||
|
// Listen for messages coming from any embedded iframe (cross-origin)
|
||||||
window.addEventListener('message', (event) => {
|
window.addEventListener('message', (event) => {
|
||||||
if (event.data.type === 'external-link') {
|
if (event.data && (event.data.type === 'external-link' || event.data.type === 'download')) {
|
||||||
parent.postMessage({ type: 'external-link', url: event.data.url }, '*');
|
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>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue