Esto se ha preguntado antes, y todas las respuestas que pude encontrar están desactualizadas y no funcionan. Este es un script del lado del usuario inyectado (a través de Tampermonkey) en una página web existente, que crea un cuadro de diálogo de 'opciones', que requiere que JS procese las selecciones realizadas en ese cuadro de diálogo, siendo el 'diálogo' una nueva ventana. Lo he reducido a lo esencial.
Llame para crear la nueva ventana:
function createConfigDiv() { let x = window.open(); x.document.write(optionsHtml); x.document.close(); }optionsHtml es global, creado en una función para que pueda usar el colapso del código, es:
const optionsHtml = loadSimpleOptionsPage(); function loadSimpleOptionsPage() { let CSP = `<meta http-equiv=Content-Security-Policy content="script-src 'self' 'unsafe-inline';">`; let html = `<html>` + `<head>`+ CSP + `</head>` + `<script language="JavaScript" type="text/javascript">var i=0;</script>` + `</html>`; return html; } Está estructurado de esa manera para que pueda comentar el bloque <script> . Comentarlo significa que todo funciona como se esperaba (una nueva pestaña, pero sin funcionalidad) independientemente de si tengo algún código JS real en el bloque.
HTML renderizado:
Error:
En pocas palabras, "Se negó a ejecutar el script en línea porque viola la siguiente directiva de Política de seguridad de contenido: "script-src '..."
Supongo que el CSP que muestra es de la página desde la que se ejecuta mi script, que abre las ventanas, sobre el que no tengo control. Se está ejecutando en torn.com
El código real es un controlador para un elemento de entrada (casilla de verificación). Realmente no puedo moverlo a un archivo externo, esto se genera sobre la marcha sin dónde alojarlo. Intenté escribir en un iframe, lo que resultó en el mismo error.
Parece que de donde sea que provenga el CSP al que se hace referencia, anula mi metaetiqueta. Si coloco intencionalmente un error de sintaxis en mi etiqueta meta, obtengo un error. Como se mencionó en las pruebas de Chrome de las directivas CSP de encabezado frente a metaetiquetas, parece que la última directiva vista solo puede fortalecer, no reducir (ni reemplazar), la política de seguridad.
Así que veo algunas opciones, ninguna de las cuales pude encontrar/implementar: abrir una nueva ventana sin CSP hasta que la agregue en una metaetiqueta, otro método además de usar window.open() para hacer lo que quiero, ??? ¡Cualquier sugerencia apreciada!