Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self' https://*.vscode-cdn.net"
VS Code tiene políticas de seguridad estrictas que prohíben el uso de event handlers inline como:
onclick="functionName()"onmouseover="..."onchange="..."
❌ Antes (Violaba CSP):
<tr onclick="toggleRow('row-1', 'expanded-1')">
<button onclick="copySqlToClipboard(0)">Copy</button>
<button onclick="openSqlInNewTab(0)">Open</button>✅ Después (CSP Compliant):
<tr class="expandable-row" data-row-id="row-1" data-expanded-id="expanded-1">
<button class="copy-btn" data-index="0">Copy</button>
<button class="open-btn" data-index="0">Open</button>Creé la función attachRowEventListeners() que:
- Se ejecuta después de renderizar las filas
- Usa
addEventListener()en lugar de onclick - Utiliza
data-*attributes para pasar parámetros
// Prevenir bubbling cuando se hace click en botones
btn.addEventListener('click', function(e) {
e.stopPropagation();
// ... lógica del botón
});function attachRowEventListeners() {
// Click en filas expandibles
document.querySelectorAll('.expandable-row').forEach(row => {
row.addEventListener('click', function(e) {
if (e.target.classList.contains('expand-btn')) return;
const rowId = this.dataset.rowId;
const expandedId = this.dataset.expandedId;
toggleRow(rowId, expandedId);
});
});
// Click en botones de expansión
document.querySelectorAll('.expand-btn').forEach(btn => {
btn.addEventListener('click', function(e) {
e.stopPropagation();
// ... lógica
});
});
// Botones de copia y apertura
// ... similar pattern
}<!-- En lugar de onclick="toggleRow('row-1', 'expanded-1')" -->
<tr data-row-id="row-1" data-expanded-id="expanded-1">
<!-- En lugar de onclick="copySqlToClipboard(0)" -->
<button class="copy-btn" data-index="0">// ❌ Antes (global namespace pollution)
window.toggleRow = function(rowId, expandedId) { ... };
// ✅ Después (scope local limpio)
function toggleRow(rowId, expandedId) { ... }- No ejecuta código inline inyectado
- Valida origen de todos los scripts
- Funciones no expuestas globalmente
- Menor superficie de ataque
- Cumple políticas de extensiones
- No requiere permisos adicionales
- ✅ Click en filas expande/contrae correctamente
- ✅ Botón de expansión funciona independientemente
- ✅ Copy SQL funciona sin errores CSP
- ✅ Open in New Tab funciona correctamente
- ✅ Event propagation manejado correctamente
- ✅ No más violaciones de CSP
- ✅ Event handlers funcionan correctamente
- ✅ Compatibilidad total con VS Code
- Siempre usar event listeners en lugar de onclick inline
- Data attributes son la forma segura de pasar parámetros
- Event propagation debe manejarse explícitamente
- Scope local es mejor que namespace global
- CSP compliance es crítico para extensiones VS Code
¡La funcionalidad expandible ahora es 100% compatible con las políticas de seguridad de VS Code! 🔒