Update extension.js
This commit is contained in:
parent
598b0efab0
commit
acb3d3e66b
|
@ -14,7 +14,9 @@ class ErikrafTDropViewProvider {
|
|||
this.extensionPath = extensionPath;
|
||||
}
|
||||
|
||||
resolveWebviewView(webviewView) {
|
||||
resolveWebviewView(webviewView, context, token) {
|
||||
this.webviewView = webviewView;
|
||||
|
||||
webviewView.webview.options = {
|
||||
enableScripts: true,
|
||||
localResourceRoots: [
|
||||
|
@ -23,27 +25,19 @@ 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);
|
||||
// Adicionar listener para mensagens do webview
|
||||
webviewView.webview.onDidReceiveMessage(
|
||||
message => {
|
||||
if (message.command === 'openExternal') {
|
||||
vscode.env.openExternal(vscode.Uri.parse(message.url));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
null,
|
||||
context.subscriptions
|
||||
);
|
||||
|
||||
webviewView.webview.html = this.getWebviewContent(webviewView.webview);
|
||||
}
|
||||
|
||||
getWebviewContent(webview) {
|
||||
return `
|
||||
|
@ -51,7 +45,7 @@ function handleWebviewMessages(webview) {
|
|||
<html lang="pt-br">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${webview.cspSource} https:; style-src ${webview.cspSource}; script-src ${webview.cspSource}; frame-src https://drop.erikraft.com;">
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; img-src ${webview.cspSource} https:; style-src ${webview.cspSource} 'unsafe-inline'; script-src ${webview.cspSource} 'unsafe-inline'; frame-src https://drop.erikraft.com/">
|
||||
<title>ErikrafT Drop</title>
|
||||
<style>
|
||||
html, body {
|
||||
|
@ -82,33 +76,79 @@ function handleWebviewMessages(webview) {
|
|||
height="844"
|
||||
style="border: none; border-radius: 16px;"
|
||||
allow="clipboard-write; camera; microphone; autoplay;"
|
||||
sandbox="allow-same-origin allow-scripts allow-popups allow-forms allow-downloads"
|
||||
referrerpolicy="strict-origin-when-cross-origin"
|
||||
sandbox="allow-same-origin allow-scripts allow-popups allow-forms allow-popups-to-escape-sandbox"
|
||||
></iframe>
|
||||
<script>
|
||||
const vscode = acquireVsCodeApi();
|
||||
(function() {
|
||||
const vscode = acquireVsCodeApi();
|
||||
const iframe = document.querySelector('iframe');
|
||||
|
||||
// Listen for messages coming from any embedded iframe (cross-origin)
|
||||
window.addEventListener('message', (event) => {
|
||||
if (event.data && (event.data.type === 'external-link' || event.data.type === 'download')) {
|
||||
vscode.postMessage(event.data);
|
||||
}
|
||||
});
|
||||
function setupLinkHandler() {
|
||||
try {
|
||||
const iframeWindow = iframe.contentWindow;
|
||||
const iframeDocument = iframeWindow.document;
|
||||
|
||||
// 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;
|
||||
// Função para abrir link externo
|
||||
function openExternalLink(url) {
|
||||
vscode.postMessage({
|
||||
command: 'openExternal',
|
||||
url: url
|
||||
});
|
||||
}
|
||||
|
||||
// Sobrescrever o comportamento padrão de links
|
||||
iframeWindow.addEventListener('click', function(e) {
|
||||
const link = e.target.closest('a');
|
||||
if (link && link.href && link.href.startsWith('http')) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
openExternalLink(link.href);
|
||||
}
|
||||
}, true);
|
||||
|
||||
// Sobrescrever window.open
|
||||
iframeWindow.open = function(url) {
|
||||
if (url && url.startsWith('http')) {
|
||||
openExternalLink(url);
|
||||
return null;
|
||||
}
|
||||
return window.open.apply(this, arguments);
|
||||
};
|
||||
|
||||
// Sobrescrever location.href
|
||||
Object.defineProperty(iframeWindow.location, 'href', {
|
||||
set: function(url) {
|
||||
if (url && url.startsWith('http')) {
|
||||
openExternalLink(url);
|
||||
} else {
|
||||
iframeWindow.location = url;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
} catch (error) {
|
||||
console.error('Erro ao configurar handler de links:', error);
|
||||
}
|
||||
}
|
||||
const downloadLink = event.target.closest('a[download]');
|
||||
if (downloadLink) {
|
||||
event.preventDefault();
|
||||
vscode.postMessage({ type: 'download', url: downloadLink.href });
|
||||
}
|
||||
});
|
||||
|
||||
// Tentar configurar o handler quando o iframe carregar
|
||||
iframe.addEventListener('load', function() {
|
||||
setupLinkHandler();
|
||||
// Tentar novamente após um delay para garantir que o conteúdo esteja carregado
|
||||
setTimeout(setupLinkHandler, 1000);
|
||||
});
|
||||
|
||||
// Backup: tentar configurar periodicamente
|
||||
let attempts = 0;
|
||||
const interval = setInterval(function() {
|
||||
if (attempts < 5) {
|
||||
setupLinkHandler();
|
||||
attempts++;
|
||||
} else {
|
||||
clearInterval(interval);
|
||||
}
|
||||
}, 1000);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue